保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
var cssParser = require('css');
 
var extractClassesFromRules = require('./extract-classes-from-rules');
var extractIdsFromRules = require('./extract-ids-from-rules');
 
/**
 * Extract the class names from the selectors found
 * in the specified code. Class order is not guaranteed.
 * @param  {string} code the CSS code to parse
 * @return {Array.<string>} the list of class names
 */
function extractClasses(code) {
  var ast = cssParser.parse(code);
  return extractClassesFromRules(ast.stylesheet.rules);
}
 
/**
 * Extract the ids from the selectors found
 * in the specified code. Id order is not guaranteed.
 * @param  {string} code the CSS code to parse
 * @return {Array.<string>} the list of ids
 */
function extractIds(code) {
  var ast = cssParser.parse(code);
  return extractIdsFromRules(ast.stylesheet.rules);
}
 
var extractMethods = {
  extractClassesFromRules: extractClassesFromRules,
  extractIdsFromRules: extractIdsFromRules
};
 
function capitalize(string) {
  return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
}
 
/**
 * Extract the specified features from a given code
 * @param  {string[]} features
 * @param  {string} code
 * @return {Object.<string, string[]>} For each feature, a list of matches
 */
function extract(features, code) {
  var ast = cssParser.parse(code);
  var rules = ast.stylesheet.rules;
  var method, methodName, feature;
  var result = {};
  var i = 0;
  while (!!(feature = features[i++])) {
    methodName = 'extract' + capitalize(feature) + 'FromRules';
    method = extractMethods[methodName];
    if (method) {
      result[feature] = method(rules);
    } else {
      throw new Error('Unsupported feature ' + feature);
    }
  }
  return result;
}
 
extract.extractClasses = extractClasses;
extract.extractIds = extractIds;
 
module.exports = extract;