forked from nodejs/nodejs.org
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrelease-schedule.js
62 lines (51 loc) · 1.71 KB
/
release-schedule.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
'use strict'
const schedule = require('../../source/schedule.json')
const today = new Date()
const datify = (release, key) => new Date(schedule[release][key])
module.exports = context => {
const statuses = context.data.root.statuses
const header = context.data.root.columns
.map(column => `<th>${column}</th>\n`)
.join('')
let content = ''
Object.keys(schedule)
.filter(release => datify(release, 'end') > today)
.forEach(release => {
const codename = schedule[release].codename
const codenameLink = codename
? `<a href="https://nodejs.org/download/release/latest-${codename.toLowerCase()}/">${codename}</a>`
: ''
const releaseLink = datify(release, 'start') < today
? `<a href="https://nodejs.org/download/release/latest-${release}.x/">${release}</a>`
: release
let status
if (datify(release, 'start') > today) {
status = statuses.pending
} else if (!schedule[release].lts || datify(release, 'lts') > today) {
status = statuses.current
} else if (datify(release, 'maintenance') < today) {
status = statuses.maintenance
} else if (datify(release, 'lts') < today) {
status = statuses.active
}
content += `<tr>
<td>${releaseLink}</td>
<td>${status}</td>
<td>${codenameLink}</td>
<td>${schedule[release].start || ''}</td>
<td>${schedule[release].lts || ''}</td>
<td>${schedule[release].maintenance || ''}</td>
<td>${schedule[release].end || ''}</td>
</tr>`
})
return `
<table class="release-schedule">
<thead>
<tr>${header}</tr>
</thead>
<tbody>
${content}
</tbody>
</table>
`
}