Skip to content

Commit 23db2f4

Browse files
committed
Import pseudo selectors. Fix microsoft/vscode#41248
1 parent 4aaa9e2 commit 23db2f4

7 files changed

+597
-517
lines changed

build/generate_browserjs.js

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -343,30 +343,32 @@ function toSource(object, keyName) {
343343
const parser = new xml2js.Parser({ explicitArray: false })
344344
const schemaFileName = 'css-schema.xml'
345345

346-
const { buildPropertiesWithMDNData } = require('./mdn-data-importer')
347-
const { addBrowserCompatDataToProperties } = require('./mdn-browser-compat-data-importer')
346+
const { addMDNProperties } = require('./mdn/mdn-data-property-importer')
347+
const { addMDNPseudoSelectors } = require('./mdn/mdn-data-selector-importer')
348+
const { addBrowserCompatDataToProperties } = require('./mdn/mdn-browser-compat-data-importer')
348349

349350
fs.readFile(path.resolve(__dirname, schemaFileName), function(err, data) {
350351
parser.parseString(data, function(err, result) {
351352
const atdirectives = toSource(result, 'atDirectives')
352-
const pseudoclasses = toSource(result, 'pseudoClasses')
353-
const pseudoelements = toSource(result, 'pseudoElements')
353+
const pseudoelements = toSource(result, 'pseudoElements')
354354

355-
let properties = toSource(result, 'properties')
356-
properties = buildPropertiesWithMDNData(properties)
355+
let pseudoclasses = toSource(result, 'pseudoClasses')
356+
pseudoclasses = addMDNPseudoSelectors(pseudoclasses)
357357

358+
let properties = toSource(result, 'properties')
359+
properties = addMDNProperties(properties)
358360
addBrowserCompatDataToProperties(atdirectives, pseudoclasses, pseudoelements, properties)
359361

360362
const descriptions = internalizeDescriptions([].concat(atdirectives, pseudoclasses, pseudoelements, properties))
361363

362-
const resultObject = {
363-
css: {
364-
atdirectives,
365-
pseudoclasses,
366-
pseudoelements,
367-
properties,
368-
}
369-
}
364+
const resultObject = {
365+
css: {
366+
atdirectives: atdirectives,
367+
pseudoelements: pseudoelements,
368+
pseudoclasses: pseudoclasses,
369+
properties: properties
370+
}
371+
};
370372

371373
function toJavaScript(obj) {
372374
const str = JSON.stringify(obj, null, '\t')
@@ -386,9 +388,9 @@ fs.readFile(path.resolve(__dirname, schemaFileName), function(err, data) {
386388
'export const descriptions : any = ' + toJavaScript(descriptions) + ';'
387389
]
388390

389-
var outputPath = path.resolve(__dirname, '../src/data/browsers.ts')
391+
const outputPath = path.resolve(__dirname, '../src/data/browsers.ts')
390392
console.log('Writing to: ' + outputPath)
391-
var content = output.join(os.EOL)
393+
const content = output.join(os.EOL)
392394
fs.writeFileSync(outputPath, content)
393395
console.log('Done')
394396
})

build/mdn-documentation.js

Lines changed: 0 additions & 108 deletions
This file was deleted.

build/mdn-browser-compat-data-importer.js renamed to build/mdn/mdn-browser-compat-data-importer.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,6 @@ function isSupported(support) {
152152
return false
153153
}
154154

155-
module.exports.addBrowserCompatDataToProperties = addBrowserCompatDataToProperties
155+
module.exports = {
156+
addBrowserCompatDataToProperties
157+
}

build/mdn-data-importer.js renamed to build/mdn/mdn-data-property-importer.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
const mdnDocumentations = require('./mdn-documentation')
6+
const { propertyDescriptions } = require('./mdn-documentation')
77

88
const mdnExcludedProperties = [
99
'--*' // custom properties
1010
]
1111

12-
function buildPropertiesWithMDNData(vscProperties) {
12+
function addMDNProperties(vscProperties) {
1313
const propertyMap = {}
1414

1515
const mdnProperties = require('mdn-data/css/properties.json')
@@ -52,7 +52,7 @@ function buildPropertiesWithMDNData(vscProperties) {
5252
if (!propertyMap[pn]) {
5353
propertyMap[pn] = {
5454
name: pn,
55-
desc: mdnDocumentations[pn] ? mdnDocumentations[pn] : '',
55+
desc: propertyDescriptions[pn] ? propertyDescriptions[pn] : '',
5656
restriction: 'none',
5757
...extractMDNProperties(allMDNProperties[pn])
5858
}
@@ -90,5 +90,5 @@ function abbreviateStatus(status) {
9090
}
9191

9292
module.exports = {
93-
buildPropertiesWithMDNData
93+
addMDNProperties
9494
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
const mdnData = require('mdn-data')
7+
const { pseudoSelectorDescriptions } = require('./mdn-documentation')
8+
9+
const mdnExcludedPseudoSelectors = [
10+
/**
11+
* See https://developer.mozilla.org/en-US/docs/Web/CSS/:matches
12+
* -moz-any and -webkit-any are already in css-schema.xml
13+
*/
14+
':any'
15+
]
16+
17+
function addMDNPseudoSelectors(vscPseudoClasses) {
18+
const mdnPseudoSelectors = mdnData.css.selectors
19+
const allPseudoSelectors = vscPseudoClasses
20+
21+
const allSelectorNames = vscPseudoClasses.map(s => s.name)
22+
23+
for (const selectorName of Object.keys(mdnPseudoSelectors)) {
24+
const selector = mdnPseudoSelectors[selectorName]
25+
if (selector.syntax.startsWith(':') && !selector.syntax.startsWith('::')) {
26+
if (
27+
!mdnExcludedPseudoSelectors.includes(selectorName) &&
28+
!allSelectorNames.includes(selectorName) &&
29+
!allSelectorNames.includes(selectorName + '()')
30+
) {
31+
allPseudoSelectors.push({
32+
name: selectorName,
33+
desc: pseudoSelectorDescriptions[selectorName] ? pseudoSelectorDescriptions[selectorName] : ''
34+
})
35+
}
36+
}
37+
}
38+
return allPseudoSelectors
39+
}
40+
41+
module.exports = {
42+
addMDNPseudoSelectors
43+
}

0 commit comments

Comments
 (0)