Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add hack for :placeholder-shown #1312

Merged
merged 1 commit into from
May 17, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 9 additions & 0 deletions data/prefixes.js
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,15 @@ f(require('caniuse-lite/data/features/css-placeholder'), browsers => {
})
})

// Placeholder-shown selector
f(require('caniuse-lite/data/features/css-placeholder-shown'), browsers => {
prefix([':placeholder-shown'], {
selector: true,
feature: 'css-placeholder-shown',
browsers
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

css-placeholder uses browsers: browsers.concat(['ie 10 old', 'ie 11 old', 'firefox 18 old']) here. I don't understand what is 'ie 10 old' vs 'ie 10'.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On my machine it is:

    [
      'firefox 4',  'firefox 5',  'firefox 6',
      'firefox 7',  'firefox 8',  'firefox 9',
      'firefox 10', 'firefox 11', 'firefox 12',
      'firefox 13', 'firefox 14', 'firefox 15',
      'firefox 16', 'firefox 17', 'firefox 18',
      'firefox 19', 'firefox 20', 'firefox 21',
      'firefox 22', 'firefox 23', 'firefox 24',
      'firefox 25', 'firefox 26', 'firefox 27',
      'firefox 28', 'firefox 29', 'firefox 30',
      'firefox 31', 'firefox 32', 'firefox 33',
      'firefox 34', 'firefox 35', 'firefox 36',
      'firefox 37', 'firefox 38', 'firefox 39',
      'firefox 40', 'firefox 41', 'firefox 42',
      'firefox 43', 'firefox 44', 'firefox 45',
      'firefox 46', 'firefox 47', 'firefox 48',
      'firefox 49', 'firefox 50', 'ie 10',
      'ie 11',      'kaios 2.5'
    ]

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We use old postfix in flexbox and some other prefixes with 2 syntaxes for the same prefix

})
})

// Hyphenation
f(require('caniuse-lite/data/features/css-hyphens'), browsers =>
prefix(['hyphens'], {
Expand Down
17 changes: 17 additions & 0 deletions lib/hacks/placeholder-shown.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
let Selector = require('../selector')

class PlaceholderShown extends Selector {
static names = [':placeholder-shown']

/**
* Return different selectors depend on prefix
*/
prefixed (prefix) {
if (prefix === '-ms-') {
return ':-ms-input-placeholder'
}
return `:${ prefix }placeholder-shown`
}
}

module.exports = PlaceholderShown
1 change: 1 addition & 0 deletions lib/prefixes.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ let Value = require('./value')
let utils = require('./utils')
Selector.hack(require('./hacks/fullscreen'))
Selector.hack(require('./hacks/placeholder'))
Selector.hack(require('./hacks/placeholder-shown'))
Declaration.hack(require('./hacks/flex'))
Declaration.hack(require('./hacks/order'))
Declaration.hack(require('./hacks/filter'))
Expand Down
9 changes: 8 additions & 1 deletion test/autoprefixer.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ let ffgradienter = autoprefixer({
let selectorer = autoprefixer({
overrideBrowserslist: ['Chrome 25', 'Firefox > 17', 'IE 10', 'Edge 12']
})
let placeholderShowner = autoprefixer({
overrideBrowserslist: ['IE >= 10']
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure about that

})
let transitionSpec = autoprefixer({
overrideBrowserslist: ['Chrome > 19', 'Firefox 14', 'IE 10', 'Opera 12']
})
Expand Down Expand Up @@ -118,6 +121,8 @@ function prefixer (name) {
return intrinsicer
} else if (name === 'selectors' || name === 'placeholder') {
return selectorer
} else if (name === 'placeholder-shown') {
return placeholderShowner
} else if (name === 'backdrop-filter' || name === 'overscroll-behavior') {
return overscroller
} else if (name === 'background-clip' || name === 'user-select') {
Expand Down Expand Up @@ -175,7 +180,8 @@ function check (from, instance = prefixer(from)) {
const COMMONS = [
'transition', 'values', 'keyframes', 'gradient', 'flex-rewrite',
'flexbox', 'filter', 'border-image', 'border-radius', 'notes', 'selectors',
'placeholder', 'fullscreen', 'intrinsic', 'mistakes', 'custom-prefix',
'placeholder', 'placeholder-shown', 'fullscreen',
'intrinsic', 'mistakes', 'custom-prefix',
'cascade', 'double', 'multicolumn', '3d-transform', 'background-size',
'supports', 'viewport', 'resolution', 'logical', 'appearance',
'advanced-filter', 'element', 'image-set', 'image-rendering',
Expand Down Expand Up @@ -575,6 +581,7 @@ describe('hacks', () => {
it('supports logical properties', () => check('logical'))
it('supports appearance', () => check('appearance'))
it('supports all placeholders', () => check('placeholder'))
it('supports placeholder-shown', () => check('placeholder-shown'))
it('supports image-rendering', () => check('image-rendering'))
it('supports border-box mask', () => check('mask-border'))
it('supports mask-composite', () => check('mask-composite'))
Expand Down
3 changes: 3 additions & 0 deletions test/cases/placeholder-shown.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
:placeholder-shown {
background: #eee
}
6 changes: 6 additions & 0 deletions test/cases/placeholder-shown.out.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
:-ms-input-placeholder {
background: #eee
}
:placeholder-shown {
background: #eee
}
3 changes: 0 additions & 3 deletions test/cases/placeholder.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
::placeholder {
color: #999
}
:placeholder-shown {
background: #eee
}
3 changes: 0 additions & 3 deletions test/cases/placeholder.out.css
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,3 @@
::placeholder {
color: #999
}
:placeholder-shown {
background: #eee
}