schit/js/Schedule.js

153 lines
3.7 KiB
JavaScript

/**
* get the data from schedule
*/
var Schedule = class {
/**
* the schedule xml object parsed as jQuery object
*/
schedule = false;
/**
* Array of Events
*
* [{
* id: 2132,
* title: "foobar"
* date:2018-09-22T10:30:00+02:00
* }]
*/
events = [];
/**
* object with Information of the conference
* {'title', 'start', 'end', ..}
*/
conf = {
title: 'defaultConf',
start: '1984-09-23',
end: '1984-09-24'
}
/**
* indepent time
*/
now = new Date();
/**
*
*/
talkPrototype = {
'date' : '1970-01-01T00:00:00+02:00',
'start' : '1970-01-01T00:00:00+02:00',
'duration' : '00:15',
'room' : 'Großer Saal',
'slug' : 'DS2018-9336-eroffnung',
'url' : '/2018/fahrplan/events/9336.html',
'title' : 'Eröffnung',
'subtitle' : 'Datenspuren 2018',
'track' : '',
'type' : '',
'language' : 'de',
'abstract' : 'Eröffnung der Datenspuren 2018',
'description' : 'Opening Datenspuren 2018',
'logo' : false,
'persons' : { 'id' : '7339', 'name' : 'Nerd Norbert' }
}
/**
* class constructor
*/
constructor(scheduleXml){
this.schedule = scheduleXml.children("schedule");
this.conf.title = this.schedule.children("conference").children("title").text();
this.conf.start = this.schedule.children("conference").children("start").text();
this.conf.end = this.schedule.children("conference").children("end").text();
this.events = this.getEvents();
}
/**
* set orientation time
*/
setTimeTo(time){
this.now = time;
}
/**
* @return String the schedule title
*/
getScheduleTitle(){
return this.conf.title;
}
/**
* @return day of conf start
*/
getScheduleStart(){
return this.conf.start;
}
/**this.events
* @return day of conf end
*/
getScheduleEnd(){
return this.conf.end;
}
/**
* return array of all Events
*/
getEvents(){
let allEvents = [];
if (this.events.length == 0 ){
//this.schedule.find('event').toArray();
this.schedule.find('event').each( function(){
allEvents.push({
title: $(this).children('title').text(),
date: $(this).children('date').text(),
start: $(this).children('start').text(),
duration: $(this).children('duration').text(),
abstract: $(this).children('abstract').text(),
persons: $(this).children('persons').text(),
});
});
}
// console.log( 888, allEvents );
return allEvents;
}
/**
* get next Events by time and room
*
* @param {Timestamp} minimum time to start
* @param {*} room
*/
getTalk(time, room){
return talk;
}
/**
* get the next Events, based on time
*
*/
getNextEvents(){
if (this.events.length == 0){
return this.events;
}
let talks = [];
let now = this.now;
//let now = new Date('September 22, 2018 19:30:00').getTime();
this.events.forEach( talk => {
let talkStart = new Date(talk.date).getTime();
if ( talkStart >= now ){
talks.push(talk);
}
});
return talks;
}
}