-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
116 lines (102 loc) · 3.24 KB
/
index.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
const Promise = require('bluebird');
const fs = Promise.promisifyAll(require('fs'));
const yaml = Promise.promisifyAll(require('yamljs'));
const glob = Promise.promisify(require('glob'));
const _ = require('lodash');
const mergeFile = require('./merge.json');
const sortFunc = (a, b) => b.count - a.count;
const arrayify = (key, obj, nju) => el => {
const ob = {
name: el,
count: obj[key][el].count
};
if(obj[key][el].img) {
ob.img = obj[key][el].img;
}
if(obj[key][el].pos) {
ob.pos = obj[key][el].pos;
}
nju[key].push(ob);
};
const objectify = (key, nju) => el => {
nju[key][el.name] = nju[key][el.name] || { count: 0 };
nju[key][el.name].img = nju[key][el.name].img || el.img;
nju[key][el.name].count ++;
};
const mapify = (map) => {
if(map) {
const res = /.*#.*\/(.*)\/(.*)/.exec(map);
if(res.length > 2) {
return {
lat: parseFloat(res[1]),
lng: parseFloat(res[2])
}
}
}
return undefined;
}
const mergify = (property, metadata, mergeFile) => key => {
const img = mergeFile[property][key].map(el => {
if(metadata[property][el] && metadata[property][el].img) {
return metadata[property][el].img;
}
})
.reduce((prev, curr) => curr || prev);
const pos = mergeFile[property][key].map(el => {
if(metadata[property][el] && metadata[property][el].pos) {
return metadata[property][el].pos;
}
})
.reduce((prev, curr) => curr || prev);
const count = mergeFile[property][key].map(el => {
if(metadata[property][el]) {
const count = metadata[property][el].count;
delete metadata[property][el];
return count;
}
return 1;
})
.reduce((prev, curr) => prev + curr);
metadata[property][key] = { count: count || 1, img: img, pos: pos };
};
glob('../technologieplauscherl.github.io/_plauscherl/**/*.html')
.map(file => fs.readFileAsync(file))
.map(result => result.toString().split('---')[1])
.map(yaml.parse)
.then(results => {
const metadata = {};
metadata.locations = {};
metadata.speakers = {};
results.forEach((el) => {
const id = el.location.name;
metadata.locations[id] = metadata.locations[id] || { count: 0 };
metadata.locations[id].count++;
metadata.locations[id].pos = el.location.oldmap
|| metadata.locations[id].pos || mapify(el.location.map) || {};
el.speakers.forEach(objectify('speakers', metadata));
})
return metadata;
})
.then(metadata => {
Object.keys(mergeFile.speakers).forEach(mergify('speakers', metadata, mergeFile));
Object.keys(mergeFile.locations).forEach(mergify('locations', metadata, mergeFile));
return metadata;
})
.then(metadata => {
var all = { locations: [], speakers: [] };
Object.keys(metadata.locations).forEach(arrayify('locations', metadata, all));
Object.keys(metadata.speakers).forEach(arrayify('speakers', metadata, all));
return all;
})
.then(all => {
all.locations.sort(sortFunc);
all.speakers.sort(sortFunc);
return all;
})
.then(all => {
console.log(all);
console.log('Speakers', all.speakers.length);
console.log('Locations', all.locations.length);
return fs.writeFileAsync('dist/metadata.json', JSON.stringify(all, null, ' '));
})
.then(() => console.log('Done'));