89 lines
2.8 KiB
JavaScript
89 lines
2.8 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
/*
|
||
|
* W3C provides JSON list of all CSS properties and their status in the standard
|
||
|
*
|
||
|
* documentation: https://www.w3.org/Style/CSS/all-properties.en.html
|
||
|
* JSON url: ( https://www.w3.org/Style/CSS/all-properties.en.json )
|
||
|
*
|
||
|
* Download that file, filter out duplicates and filter the properties based on the wanted standard level
|
||
|
*
|
||
|
* ED - Editors' Draft (not a W3C Technical Report)
|
||
|
* FPWD - First Public Working Draft
|
||
|
* WD - Working Draft
|
||
|
* LC - Last Call Working Draft
|
||
|
* CR - Candidate Recommendation
|
||
|
* PR - Proposed Recommendation
|
||
|
* REC - Recommendation
|
||
|
* NOTE - Working Group Note
|
||
|
*/
|
||
|
|
||
|
var fs = require('fs');
|
||
|
var path = require('path');
|
||
|
|
||
|
var request = require('request');
|
||
|
|
||
|
const { camelToDashed } = require('../lib/parsers');
|
||
|
|
||
|
var url = 'https://www.w3.org/Style/CSS/all-properties.en.json';
|
||
|
|
||
|
console.log('Downloading CSS properties...');
|
||
|
|
||
|
function toCamelCase(propName) {
|
||
|
return propName.replace(/-([a-z])/g, function(g) {
|
||
|
return g[1].toUpperCase();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
request(url, function(error, response, body) {
|
||
|
if (!error && response.statusCode === 200) {
|
||
|
var allCSSProperties = JSON.parse(body);
|
||
|
|
||
|
// Filter out all properties newer than Working Draft
|
||
|
var workingDraftAndOlderProperties = allCSSProperties.filter(function(cssProp) {
|
||
|
// TODO: --* css Needs additional logic to this module, so filter it out for now
|
||
|
return cssProp.status !== 'ED' && cssProp.status !== 'FPWD' && cssProp.property !== '--*';
|
||
|
});
|
||
|
|
||
|
// Remove duplicates, there can be many properties in different states of standard
|
||
|
// and add only property names to the list
|
||
|
var CSSpropertyNames = [];
|
||
|
workingDraftAndOlderProperties.forEach(function(cssProp) {
|
||
|
const camelCaseName = toCamelCase(cssProp.property);
|
||
|
|
||
|
if (CSSpropertyNames.indexOf(camelCaseName) === -1) {
|
||
|
CSSpropertyNames.push(camelCaseName);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
var out_file = fs.createWriteStream(path.resolve(__dirname, './../lib/allProperties.js'), {
|
||
|
encoding: 'utf-8',
|
||
|
});
|
||
|
|
||
|
var date_today = new Date();
|
||
|
out_file.write(
|
||
|
"'use strict';\n\n// autogenerated - " +
|
||
|
(date_today.getMonth() + 1 + '/' + date_today.getDate() + '/' + date_today.getFullYear()) +
|
||
|
'\n\n'
|
||
|
);
|
||
|
out_file.write('/*\n *\n * https://www.w3.org/Style/CSS/all-properties.en.html\n */\n\n');
|
||
|
|
||
|
out_file.write('var allProperties = new Set();\n');
|
||
|
out_file.write('module.exports = allProperties;\n');
|
||
|
|
||
|
CSSpropertyNames.forEach(function(property) {
|
||
|
out_file.write('allProperties.add(' + JSON.stringify(camelToDashed(property)) + ');\n');
|
||
|
});
|
||
|
|
||
|
out_file.end(function(err) {
|
||
|
if (err) {
|
||
|
throw err;
|
||
|
}
|
||
|
|
||
|
console.log('Generated ' + Object.keys(CSSpropertyNames).length + ' properties.');
|
||
|
});
|
||
|
} else {
|
||
|
throw error;
|
||
|
}
|
||
|
});
|