use crate::targets::Browsers;
#[derive(Clone, Copy, PartialEq)]
pub enum Feature {
AnyPseudo,
Clamp,
ColorFunction,
CssAnyLink,
CssAutofill,
CssCaseInsensitive,
CssDefaultPseudo,
CssDirPseudo,
CssFirstLetter,
CssFirstLine,
CssFocusVisible,
CssFocusWithin,
CssGencontent,
CssHas,
CssInOutOfRange,
CssIndeterminatePseudo,
CssMarkerPseudo,
CssMatchesPseudo,
CssNamespaces,
CssNesting,
CssNotSelList,
CssOptionalPseudo,
CssPlaceholder,
CssPlaceholderShown,
CssReadOnlyWrite,
CssRrggbbaa,
CssSel2,
CssSel3,
CssSelection,
CustomMediaQueries,
Dialog,
DoublePositionGradients,
FormValidation,
Fullscreen,
LabColors,
LangList,
LogicalBorderRadius,
LogicalBorders,
LogicalInset,
LogicalMargin,
LogicalPadding,
LogicalSize,
LogicalTextAlign,
MediaIntervalSyntax,
MediaRangeSyntax,
OklabColors,
OverflowShorthand,
P3Colors,
PlaceContent,
PlaceItems,
PlaceSelf,
Shadowdomv1,
}
impl Feature {
pub fn is_compatible(&self, browsers: Browsers) -> bool {
match self {
Feature::CssSel2 => {
if let Some(version) = browsers.ie {
if version < 458752 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 786432 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 131072 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 262144 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 196864 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 197120 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 131328 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 262144 {
return false;
}
}
}
Feature::CssSel3 => {
if let Some(version) = browsers.ie {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 786432 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 197888 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 262144 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 197120 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 591104 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 197120 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 131328 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 262144 {
return false;
}
}
}
Feature::CssGencontent | Feature::CssFirstLine => {
if let Some(version) = browsers.ie {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 786432 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 131072 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 262144 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 196864 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 197120 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 131328 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 262144 {
return false;
}
}
}
Feature::CssFirstLetter => {
if let Some(version) = browsers.ie {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 786432 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 197888 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 327936 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 722432 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 327680 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 196608 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 262144 {
return false;
}
}
}
Feature::CssInOutOfRange => {
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 3276800 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 3473408 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 655616 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 2621440 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 656128 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 327680 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::FormValidation => {
if let Some(version) = browsers.ie {
if version < 655360 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 786432 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 262144 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 655360 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 655616 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 655360 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 656128 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 263171 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 262144 {
return false;
}
}
}
Feature::CssAnyLink => {
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 3276800 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 4259840 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 3407872 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 590336 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::CssDefaultPseudo => {
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 262144 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 3342336 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 655616 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 2490368 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 656128 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 327680 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::CssDirPseudo => {
if let Some(version) = browsers.firefox {
if version < 3211264 {
return false;
}
}
if browsers.android.is_some()
|| browsers.chrome.is_some()
|| browsers.edge.is_some()
|| browsers.ie.is_some()
|| browsers.ios_saf.is_some()
|| browsers.opera.is_some()
|| browsers.safari.is_some()
|| browsers.samsung.is_some()
{
return false;
}
}
Feature::CssFocusWithin => {
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 3407872 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 3932160 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 655616 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 3080192 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 656128 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 524800 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::CssFocusVisible => {
if let Some(version) = browsers.edge {
if version < 5636096 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 5570560 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 5636096 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 984064 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 4718592 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 984064 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 917504 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::CssIndeterminatePseudo => {
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 3342336 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 2555904 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 655616 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 1703936 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 656128 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 262144 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::CssMatchesPseudo => {
if let Some(version) = browsers.edge {
if version < 5767168 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 5111808 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 5767168 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 917504 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 4915200 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 917504 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 983040 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::CssOptionalPseudo => {
if let Some(version) = browsers.ie {
if version < 655360 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 786432 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 262144 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 983040 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 327680 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 983040 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 327680 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 131840 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 262144 {
return false;
}
}
}
Feature::CssPlaceholderShown => {
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 3342336 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 3080192 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 2228224 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 327680 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::Dialog => {
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 6422528 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 2424832 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 984064 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 1572864 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 984064 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 262144 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::Fullscreen => {
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 4194304 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 4653056 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 786688 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 655616 {
return false;
}
}
if browsers.android.is_some()
|| browsers.ie.is_some()
|| browsers.ios_saf.is_some()
|| browsers.safari.is_some()
{
return false;
}
}
Feature::CssMarkerPseudo => {
if let Some(version) = browsers.edge {
if version < 5636096 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 4456448 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 5636096 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 4718592 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 721664 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 917504 {
return false;
}
}
if browsers.ie.is_some() || browsers.safari.is_some() {
return false;
}
}
Feature::CssPlaceholder => {
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 3342336 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 3735552 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 655616 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 2883584 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 656128 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 459264 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::CssSelection => {
if let Some(version) = browsers.ie {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 786432 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 4063232 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 262144 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 196864 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 591104 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 263168 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 262144 {
return false;
}
}
if browsers.ios_saf.is_some() {
return false;
}
}
Feature::CssCaseInsensitive => {
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 3080192 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 3211264 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 2359296 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 327680 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::CssReadOnlyWrite => {
if let Some(version) = browsers.edge {
if version < 851968 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 5111808 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 2359296 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 1507328 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 262144 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::CssAutofill => {
if let Some(version) = browsers.chrome {
if version < 6291456 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 6291456 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 5636096 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 5373952 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 983040 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 983040 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if browsers.ie.is_some() || browsers.samsung.is_some() {
return false;
}
}
Feature::CssNamespaces => {
if let Some(version) = browsers.ie {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 786432 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 131072 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 262144 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 262144 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 262656 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 131328 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 262144 {
return false;
}
}
}
Feature::Shadowdomv1 => {
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 4128768 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 3473408 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 655360 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 2621440 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 720896 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 393728 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::CssRrggbbaa => {
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 3211264 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 4063232 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 655360 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 3407872 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 655360 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 524800 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::CssNesting | Feature::CustomMediaQueries | Feature::MediaIntervalSyntax | Feature::OklabColors => {
return false
}
Feature::CssNotSelList => {
if let Some(version) = browsers.edge {
if version < 5767168 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 5505024 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 5767168 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 4915200 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 6488064 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 983040 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::CssHas => {
if let Some(version) = browsers.safari {
if version < 984064 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 984064 {
return false;
}
}
if browsers.android.is_some()
|| browsers.chrome.is_some()
|| browsers.edge.is_some()
|| browsers.firefox.is_some()
|| browsers.ie.is_some()
|| browsers.opera.is_some()
|| browsers.samsung.is_some()
{
return false;
}
}
Feature::DoublePositionGradients => {
if let Some(version) = browsers.chrome {
if version < 4653056 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 4194304 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 3276800 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 786688 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 786944 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 655360 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 4653056 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::Clamp => {
if let Some(version) = browsers.chrome {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 3735552 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 852224 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 852992 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 786432 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 5177344 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::PlaceSelf | Feature::PlaceItems => {
if let Some(version) = browsers.chrome {
if version < 3866624 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 2949120 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 2818048 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 720896 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 720896 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 458752 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 3866624 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::PlaceContent => {
if let Some(version) = browsers.chrome {
if version < 3866624 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 2949120 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 2818048 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 589824 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 458752 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 3866624 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::OverflowShorthand => {
if let Some(version) = browsers.chrome {
if version < 4456448 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 3997696 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 3145728 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 655360 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 4456448 {
return false;
}
}
if browsers.ie.is_some() || browsers.ios_saf.is_some() || browsers.safari.is_some() {
return false;
}
}
Feature::MediaRangeSyntax => {
if let Some(version) = browsers.firefox {
if version < 4128768 {
return false;
}
}
if browsers.android.is_some()
|| browsers.chrome.is_some()
|| browsers.edge.is_some()
|| browsers.ie.is_some()
|| browsers.ios_saf.is_some()
|| browsers.opera.is_some()
|| browsers.safari.is_some()
|| browsers.samsung.is_some()
{
return false;
}
}
Feature::LogicalBorders | Feature::LogicalMargin | Feature::LogicalPadding => {
if let Some(version) = browsers.chrome {
if version < 4521984 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 2686976 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 3145728 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 786688 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 786944 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 655360 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 4521984 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::LogicalBorderRadius => {
if let Some(version) = browsers.chrome {
if version < 5832704 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 5832704 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 4325376 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 4915200 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 983040 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 983040 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 983040 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 5832704 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::LogicalInset => {
if let Some(version) = browsers.chrome {
if version < 5701632 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 5701632 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 4128768 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 4063232 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 917760 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 918784 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 917504 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 5701632 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::LogicalSize => {
if let Some(version) = browsers.chrome {
if version < 3735552 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 2686976 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 2818048 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 786688 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 786944 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 327680 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 3735552 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::LogicalTextAlign => {
if let Some(version) = browsers.chrome {
if version < 1179648 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 262144 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 917504 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 196864 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 131072 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 65536 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 2424832 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::LabColors | Feature::ColorFunction => {
if let Some(version) = browsers.safari {
if version < 983040 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 983040 {
return false;
}
}
if browsers.android.is_some()
|| browsers.chrome.is_some()
|| browsers.edge.is_some()
|| browsers.firefox.is_some()
|| browsers.ie.is_some()
|| browsers.opera.is_some()
|| browsers.samsung.is_some()
{
return false;
}
}
Feature::AnyPseudo => {
if let Some(version) = browsers.chrome {
if version < 1179648 {
return false;
}
}
if let Some(version) = browsers.edge {
if version < 5177344 {
return false;
}
}
if let Some(version) = browsers.firefox {
if version < 262144 {
return false;
}
}
if let Some(version) = browsers.opera {
if version < 917504 {
return false;
}
}
if let Some(version) = browsers.safari {
if version < 327680 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 327680 {
return false;
}
}
if let Some(version) = browsers.samsung {
if version < 65536 {
return false;
}
}
if let Some(version) = browsers.android {
if version < 2424832 {
return false;
}
}
if browsers.ie.is_some() {
return false;
}
}
Feature::P3Colors | Feature::LangList => {
if let Some(version) = browsers.safari {
if version < 655616 {
return false;
}
}
if let Some(version) = browsers.ios_saf {
if version < 656128 {
return false;
}
}
if browsers.android.is_some()
|| browsers.chrome.is_some()
|| browsers.edge.is_some()
|| browsers.firefox.is_some()
|| browsers.ie.is_some()
|| browsers.opera.is_some()
|| browsers.samsung.is_some()
{
return false;
}
}
}
true
}
pub fn is_partially_compatible(&self, targets: Browsers) -> bool {
let mut browsers = Browsers::default();
if targets.android.is_some() {
browsers.android = targets.android;
if self.is_compatible(browsers) {
return true;
}
browsers.android = None;
}
if targets.chrome.is_some() {
browsers.chrome = targets.chrome;
if self.is_compatible(browsers) {
return true;
}
browsers.chrome = None;
}
if targets.edge.is_some() {
browsers.edge = targets.edge;
if self.is_compatible(browsers) {
return true;
}
browsers.edge = None;
}
if targets.firefox.is_some() {
browsers.firefox = targets.firefox;
if self.is_compatible(browsers) {
return true;
}
browsers.firefox = None;
}
if targets.ie.is_some() {
browsers.ie = targets.ie;
if self.is_compatible(browsers) {
return true;
}
browsers.ie = None;
}
if targets.ios_saf.is_some() {
browsers.ios_saf = targets.ios_saf;
if self.is_compatible(browsers) {
return true;
}
browsers.ios_saf = None;
}
if targets.opera.is_some() {
browsers.opera = targets.opera;
if self.is_compatible(browsers) {
return true;
}
browsers.opera = None;
}
if targets.safari.is_some() {
browsers.safari = targets.safari;
if self.is_compatible(browsers) {
return true;
}
browsers.safari = None;
}
if targets.samsung.is_some() {
browsers.samsung = targets.samsung;
if self.is_compatible(browsers) {
return true;
}
browsers.samsung = None;
}
false
}
}