events_vis = es=> {
const container = html`<div class="events"></div>`
const element = html`<div class="events-elem">
<style>
.events-elem {
padding-bottom: 30px;
}
.events {
display: flex;
flex-direction: column;
max-height: 900px;
flex-wrap: wrap;
}
.events > .week-separator {
margin-top: 10px;
color: hsla(0,0%,0%,0.5);
}
.events > .event {
margin: 5px;
min-width: 500px;
}
.events > .event .date {
min-width: 60px;
display: inline-block;
}
.events > .event .tag {
padding: 2px 8px;
border-radius: 4px;
background-color: hsl(0,0%,90%);
}
.events > .event .tag[data-type="tutorial"] {
background-color: hsl(250,100%,90%);
}
.events > .event .tag[data-type="presentation"] {
background-color: hsl(50,80%,90%);
}
.events > .event .tag[data-type="test"] {
background-color: hsl(30,70%,90%);
}
.events > .event .tag[data-type="examination"] {
background-color: hsl(10,70%,90%);
}
.events > .event .tutor {
border-radius: 1000px;
display: inline-flex;
width: 1.3em;
height: 1.3em;
background-color: hsl(0,0%,90%);
margin-left: 3px;
justify-content: center;
align-items: center;
vertical-align: middle;
position: relative;
top: -1px;
}
.events > .event .tutor > span {
font-size: 0.7em;
color: hsla(0,0%,0%,0.65);
font-weight: bold;
font-family: sans-serif;
}
.events > .event .tutor[data-id="L"] {
background-color: hsl(200,100%,80%);
}
.events > .event .tutor[data-id="K"] {
background-color: hsl(30,60%,70%);
}
.events > .event .tutor[data-id="M"] {
background-color: hsl(350,80%,80%);
}
.events > .event .tutor[data-id="A"] {
background-color: hsl(135,70%,80%);
}
</style>
<h1>datasys ht.2020 overview</h1>
${container}
<br/><br/>
<h3>Notes:</h3>
For each project, also check
<a href="https://kth.instructure.com/courses/17171/pages/project-descriptions-and-submission-instructions?module_item_id=188105">canvas downloads</a>
and
<a href="https://kth.instructure.com/courses/17171/quizzes">canvas quizzes</a>
<br/>
<div style="opacity: 0.5; font-size: 0.8em; margin-top: 10px;">Created by Leonard Pauli, for datasys (KTH course EP1200), feb 2020</div>
</div>`
const locationElGet = l=>
l === null? ''
: l.type === 'many'? (()=> {
const p = html`<span></span>`
l.value.map(locationElGet).map((el, i)=> (i>0&&p.append(', '), p.appendChild(el)))
return p
})()
: l.type === 'kth-place'?
html`<a href="${kth_location_href(l.title)}">${l.title}</a>`
: null
const tutorElGet = t=> html`<span class="tutor" data-id="${t.id}"><span>${t.id}</span></span>`
const tutorsElGet = ts=> {
const el = html`<span></span>`
ts.map(tutorElGet).map(e=> el.appendChild(e))
return el
}
const projectElGet = nr=> {
const link = html`<a class="tag project" href="https://www.nand2tetris.org/project${nr<10?'0':''}${nr}">pr.${nr}</a>`
return link
}
let weekPrev = null
es.map(e=> {
if (weekPrev!==e.date.week) {
container.appendChild(html`<div class="week-separator">Week ${e.date.week}</div>`)
weekPrev = e.date.week
}
const el = html`<div class="event">
<span class="date">${e.date.day} ${e.date.monthNameShort}:</span>
${e.date.timeStart}-${e.date.timeEnd}:
<span class="tag" data-type="${e.type}">${e.type}</span>
${e.type==='tutorial'? projectElGet(e.projectNr): ''}
${e.location?locationElGet(e.location):''}
${e.type==='tutorial'? tutorsElGet(e.tutors): ''}
</div>`
container.appendChild(el)
})
element.value = es
return element
}