-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
116 lines (102 loc) · 3.06 KB
/
script.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
var options = {
groupOrder: function (a, b) {
return a.id - b.id;
},
editable: false,
groupHeightMode: 'fixed',
zoomMax: 64800000,
zoomMin: 3600000,
locale: 'de_DE'
};
async function loadData() {
const data = await fetch("event.json")
.then(response => response.json())
.catch(error => console.log(error));
const mixin = await fetch("mixin.json")
.then(response => response.json())
.catch(error => console.log(error));
parseData(data, mixin);
}
function parseData(data, mixin) {
const groupList = Object.entries(data.rooms)
.map(([roomId, room]) => (
{
id: roomId,
content: groupContent(room)
}
));
var groups = new vis.DataSet(groupList);
const itemList = Object.entries(data.agenda)
.filter(([itemId, item]) => item.title && item.title.trim() !== "")
.map(([itemId, item]) => (
{
id: itemId,
group: item.roomId,
content: itemContent(item, data.mainFocuses, mixin.streams),
start: new Date(item.start * 1000),
end: new Date(item.end * 1000)
}
));
var items = new vis.DataSet(itemList);
createTimeline(options, groups, items);
}
function formatSpeaker(speaker) {
const name = speaker.name;
var company = "";
if (speaker.company && speaker.company.trim() !== "") {
company = `<i>(${speaker.company})</i>`;
}
return `<h6 class="card-subtitle mb-2 text-muted">${name} ${company}</h6>`;
}
function itemContent(item, streamData, streamMixin) {
var title = item.title.trim();
var speakers = new Array();
if (item.speaker) {
speakers.push(formatSpeaker(item.speaker));
}
if (item.coSpeaker) {
item.coSpeaker.forEach(speaker =>
speakers.push(formatSpeaker(speaker))
);
}
var speakerLines = speakers.join('\n');
var stream = "";
if (item.mainFocus) {
var icon = "";
if (streamMixin[item.mainFocus]) {
icon = streamMixin[item.mainFocus].icon;
}
var streamName = "";
if (streamData[item.mainFocus]) {
streamName = streamData[item.mainFocus];
}
stream = `${icon} ${streamName}`;
}
var html = `
<h5 class="card-title">${title}</h5>
${speakerLines}
<p class="card-text">${stream}</p>
`;
var element = document.createElement('div');
element.innerHTML = html;
return element;
}
function groupContent(room) {
var group = document.createElement('div');
var html = `
<h3>${room.name.trim()}</h3><br/>
<span>🪑 ${room.capacity}</span>
`;
group.innerHTML = html;
return group;
}
function createTimeline(options, groups, items) {
var container = document.getElementById('visualization');
var timeline = new vis.Timeline(container);
timeline.setOptions(options);
timeline.setGroups(groups);
timeline.setItems(items);
}
function init() {
loadData();
}