-
Notifications
You must be signed in to change notification settings - Fork 6
/
build.js
75 lines (67 loc) · 1.82 KB
/
build.js
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
66
67
68
69
70
71
72
73
74
75
'use strict';
const fs = require('fs');
const cheerio = require('cheerio');
const got = require('got');
const each = require('async-each');
const parentUrl = 'http://www.w3schools.com/cssref/';
const childUrl = (url) => `${parentUrl}${url}`;
const results = [];
const getPropValues = (url) => {
return new Promise((resolve, reject) => {
got(childUrl(url))
.then(response => {
let $child = cheerio.load(response.body);
let $rows = $child('.w3-table-all tr');
let results = [];
$rows.each((i, row) => {
if (i > 0) {
let $cols = $child(row).find('td');
let value = $cols.eq(0).text();
results.push(value);
}
});
resolve(results);
})
.catch(reject);
});
};
const saveResults = () => {
fs.writeFile('css-properties-values.json', JSON.stringify(results));
}
got(parentUrl)
.then(response => {
let $parent = cheerio.load(response.body);
let $rows = $parent('.w3-table-all tr');
each($rows.toArray(), (row, next) => {
let $cols = $parent(row).find('td');
let property = $cols.eq(0).text();
let childUrl = $parent(row).find('a').attr('href');
// no prop, skip
if (!property.length) {
next();
} else {
if (childUrl) {
// get values of property
getPropValues(childUrl)
.then((values) => {
results.push({
property,
values
});
next();
})
.catch((err) => console.log(err));
} else {
// no values, push anyways
results.push({
property,
values: null
});
next();
}
}
}, saveResults);
})
.catch(error => {
console.log(error.response.body);
});