Skip to content

Commit 5468c9f

Browse files
authored
Autoprefix the file-selector-button pseudo-element (#1412)
* Autoprefix the file-selector-button pseudo-element Prototype using MDN compat data where caniuse is not usable. * Hardcode data instead of using MDN * Add test to hacks block
1 parent 05cfed6 commit 5468c9f

6 files changed

+55
-0
lines changed

data/prefixes.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,25 @@ f(prefixFullscreen, { match: /x(\s#2|$)/ }, browsers =>
521521
})
522522
)
523523

524+
// File selector button
525+
prefix(['::file-selector-button'], {
526+
selector: true,
527+
feature: 'fullscreen',
528+
browsers: [
529+
'chrome 89',
530+
'edge 89',
531+
'firefox 82',
532+
'opera 75',
533+
'safari 14.1',
534+
'android 89',
535+
'and_chr 89',
536+
'op_mob 63',
537+
'and_ff 82',
538+
'ios_saf 14.5',
539+
'samsung 15.0'
540+
]
541+
})
542+
524543
// Tab size
525544
let prefixTabsize = require('caniuse-lite/data/features/css3-tabsize')
526545

lib/hacks/file-selector-button.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
let Selector = require('../selector')
2+
3+
class FileSelectorButton extends Selector {
4+
/**
5+
* Return different selectors depend on prefix
6+
*/
7+
prefixed(prefix) {
8+
if (prefix === '-webkit-') {
9+
return '::-webkit-file-upload-button'
10+
}
11+
return `::file-selector-button`
12+
}
13+
}
14+
15+
FileSelectorButton.names = ['::file-selector-button']
16+
17+
module.exports = FileSelectorButton

lib/prefixes.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ let utils = require('./utils')
1212
let hackFullscreen = require('./hacks/fullscreen')
1313
let hackPlaceholder = require('./hacks/placeholder')
1414
let hackPlaceholderShown = require('./hacks/placeholder-shown')
15+
let hackFileSelectorButton = require('./hacks/file-selector-button')
1516
let hackFlex = require('./hacks/flex')
1617
let hackOrder = require('./hacks/order')
1718
let hackFilter = require('./hacks/filter')
@@ -68,6 +69,7 @@ let hackFilterValue = require('./hacks/filter-value')
6869
Selector.hack(hackFullscreen)
6970
Selector.hack(hackPlaceholder)
7071
Selector.hack(hackPlaceholderShown)
72+
Selector.hack(hackFileSelectorButton)
7173
Declaration.hack(hackFlex)
7274
Declaration.hack(hackOrder)
7375
Declaration.hack(hackFilter)

test/autoprefixer.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ let ffgradienter = autoprefixer({
5656
let selectorer = autoprefixer({
5757
overrideBrowserslist: ['Chrome 25', 'Firefox > 17', 'IE 10', 'Edge 12']
5858
})
59+
let fileSelectorButtoner = autoprefixer({
60+
overrideBrowserslist: ['Chrome > 25', 'Firefox > 85']
61+
})
5962
let placeholderShowner = autoprefixer({
6063
overrideBrowserslist: ['IE >= 10']
6164
})
@@ -123,6 +126,8 @@ function prefixer(name: string): Plugin {
123126
return intrinsicer
124127
} else if (name === 'selectors' || name === 'placeholder') {
125128
return selectorer
129+
} else if (name === 'selectors' || name === 'file-selector-button') {
130+
return fileSelectorButtoner
126131
} else if (name === 'placeholder-shown') {
127132
return placeholderShowner
128133
} else if (name === 'backdrop-filter' || name === 'overscroll-behavior') {
@@ -680,6 +685,9 @@ describe('hacks', () => {
680685
it('supports all fullscreens', () => {
681686
check('fullscreen')
682687
})
688+
it('supports file-selector-button', () => {
689+
check('file-selector-button')
690+
})
683691
it('supports custom prefixes', () => {
684692
check('custom-prefix')
685693
})

test/cases/file-selector-button.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
::file-selector-button {
2+
background: black
3+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
::-webkit-file-upload-button {
2+
background: black
3+
}
4+
::file-selector-button {
5+
background: black
6+
}

0 commit comments

Comments
 (0)