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;
 | |
|   }
 | |
| });
 |