TO be Completed.
This commit is contained in:
101
content/js/calendrier.js
Normal file
101
content/js/calendrier.js
Normal file
@@ -0,0 +1,101 @@
|
||||
|
||||
const http = require('http')
|
||||
const ical = require('ical')
|
||||
|
||||
function createEventEntry (event) {
|
||||
const entry = document.createElement('div')
|
||||
const formatDate = Intl.DateTimeFormat('fr', { dateStyle: 'long', timeStyle: 'short' }).format
|
||||
const header = document.createElement('h3')
|
||||
|
||||
header.textContent = formatDate(event.date) + ' | ' + event.summary
|
||||
|
||||
entry.className = 'event-entry'
|
||||
entry.setAttribute('entry-time', event.date.getTime())
|
||||
entry.appendChild(header)
|
||||
|
||||
return entry
|
||||
}
|
||||
|
||||
function sortEvents (events) {
|
||||
const sorted = []
|
||||
|
||||
/* First extract the events. */
|
||||
Object.values(events).forEach(event => {
|
||||
if (event.type === 'VEVENT') {
|
||||
sorted.push({
|
||||
date: event.start,
|
||||
location: event.location,
|
||||
summary: event.summary
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
/* Then sort them out. */
|
||||
// TODO: Useless here. Should be done on callbacks below
|
||||
return sorted.sort((a, b) => { return a.date < b.date })
|
||||
}
|
||||
|
||||
function loadEvents (cb) {
|
||||
http.request({
|
||||
// host: 'www.ti-nuage.fr',
|
||||
host: 'test-www.ti-nuage.fr',
|
||||
path: '/donnees/calendrier.php'
|
||||
}, function (response) {
|
||||
let str = ''
|
||||
|
||||
response.on('data', function (chunk) {
|
||||
str += chunk
|
||||
})
|
||||
|
||||
response.on('end', function () {
|
||||
const events = sortEvents(ical.parseICS(str))
|
||||
cb(events)
|
||||
})
|
||||
}).end()
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
||||
fill: function (target) {
|
||||
loadEvents(events => {
|
||||
events.forEach(event => {
|
||||
target.appendChild(createEventEntry(event))
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
mergeWithNews: function (target) {
|
||||
const blogEntries = target.getElementsByClassName('blog-entry')
|
||||
const entries = {}
|
||||
|
||||
for (let i = 0; i < blogEntries.length; ++i) {
|
||||
const item = blogEntries.item(i)
|
||||
entries[item.getAttribute('entry-time')] = item
|
||||
}
|
||||
|
||||
loadEvents(events => {
|
||||
target.innerHTML = ''
|
||||
|
||||
/* Merge events with blog entries */
|
||||
events.forEach(event => {
|
||||
entries[event.date.getTime()] = createEventEntry(event)
|
||||
})
|
||||
|
||||
/* Sort and only keep entries up to the next 30 days */
|
||||
const limitTime = Date.now() + (30 * 24 * 60 * 60 * 1000)
|
||||
const times = Object.keys(entries).sort(function (a, b) { return a < b })
|
||||
|
||||
for (let i = times.length; i--;) {
|
||||
if (times[i] > limitTime) {
|
||||
times.splice(i, 1)
|
||||
}
|
||||
}
|
||||
|
||||
/* Finally display only the first six entries */
|
||||
times.splice(5, times.length)
|
||||
times.forEach(time => {
|
||||
target.appendChild(entries[time])
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user