73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package compat
|
|
|
|
type CSSFeature uint32
|
|
|
|
const (
|
|
HexRGBA CSSFeature = 1 << iota
|
|
|
|
RebeccaPurple
|
|
|
|
// This feature includes all of the following:
|
|
// - Allow floats in rgb() and rgba()
|
|
// - hsl() can accept alpha values
|
|
// - rgb() can accept alpha values
|
|
// - Space-separated functional color notations
|
|
Modern_RGB_HSL
|
|
|
|
InsetProperty
|
|
)
|
|
|
|
func (features CSSFeature) Has(feature CSSFeature) bool {
|
|
return (features & feature) != 0
|
|
}
|
|
|
|
var cssTable = map[CSSFeature]map[Engine][]versionRange{
|
|
// Data from: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value
|
|
HexRGBA: {
|
|
Chrome: {{start: v{62, 0, 0}}},
|
|
Edge: {{start: v{79, 0, 0}}},
|
|
Firefox: {{start: v{49, 0, 0}}},
|
|
IOS: {{start: v{9, 3, 0}}},
|
|
Safari: {{start: v{9, 1, 0}}},
|
|
},
|
|
RebeccaPurple: {
|
|
Chrome: {{start: v{38, 0, 0}}},
|
|
Edge: {{start: v{12, 0, 0}}},
|
|
Firefox: {{start: v{33, 0, 0}}},
|
|
IOS: {{start: v{8, 0, 0}}},
|
|
Safari: {{start: v{9, 0, 0}}},
|
|
},
|
|
Modern_RGB_HSL: {
|
|
Chrome: {{start: v{66, 0, 0}}},
|
|
Edge: {{start: v{79, 0, 0}}},
|
|
Firefox: {{start: v{52, 0, 0}}},
|
|
IOS: {{start: v{12, 2, 0}}},
|
|
Safari: {{start: v{12, 1, 0}}},
|
|
},
|
|
|
|
// Data from: https://developer.mozilla.org/en-US/docs/Web/CSS/inset
|
|
InsetProperty: {
|
|
Chrome: {{start: v{87, 0, 0}}},
|
|
Edge: {{start: v{87, 0, 0}}},
|
|
Firefox: {{start: v{66, 0, 0}}},
|
|
IOS: {{start: v{14, 5, 0}}},
|
|
Safari: {{start: v{14, 1, 0}}},
|
|
},
|
|
}
|
|
|
|
// Return all features that are not available in at least one environment
|
|
func UnsupportedCSSFeatures(constraints map[Engine][]int) (unsupported CSSFeature) {
|
|
for feature, engines := range cssTable {
|
|
for engine, version := range constraints {
|
|
if engine == ES || engine == Node {
|
|
// Specifying "--target=es2020" shouldn't affect CSS
|
|
continue
|
|
}
|
|
if versionRanges, ok := engines[engine]; !ok || !isVersionSupported(versionRanges, version) {
|
|
unsupported |= feature
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|