Compare commits
13 Commits
Author | SHA1 | Date |
---|---|---|
Petko Bordjukov | c9ceb8407a | |
Petko Bordjukov | a67e2795b1 | |
Petko Bordjukov | faa536a7d3 | |
Petko Bordjukov | 575d359fe3 | |
Petko Bordjukov | 1c4bfa72f3 | |
Petko Bordjukov | efdab41b1a | |
Petko Bordjukov | 038b8099fc | |
Petko Bordjukov | 0d1322fac4 | |
Petko Bordjukov | c7ea4fb8a7 | |
Petko Bordjukov | 221258f723 | |
Petko Bordjukov | fc09fef53c | |
Petko Bordjukov | e5ac8c178a | |
Petko Bordjukov | 06e2a9d2bd |
BIN
background.mp4
BIN
background.mp4
Binary file not shown.
Binary file not shown.
52
index.html
52
index.html
|
@ -1,6 +1,6 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>OpenFest 2021</title>
|
||||
<title>YAPC::EU Interlude</title>
|
||||
|
||||
<meta charset="utf-8">
|
||||
|
||||
|
@ -13,7 +13,6 @@
|
|||
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/2.6.2/lib/js/head.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/2.6.2/js/reveal.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.6.0/moment.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.6.0/lang/bg.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ractive.js/0.3.7/ractive.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>
|
||||
<script src="schedule.js"></script>
|
||||
|
@ -24,12 +23,8 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <video id="background_video" src="background.mp4" loop autoplay /> -->
|
||||
<!-- TODO: fix display of speakers -->
|
||||
|
||||
<script id="agenda_template" type="text/ractive">
|
||||
<section id="agenda">
|
||||
<h3>{{room}}</h3>
|
||||
<table class="reveal">
|
||||
<tbody>
|
||||
{{#pastEvents}}
|
||||
|
@ -74,32 +69,41 @@
|
|||
|
||||
<script id="current_talk_template" type="text/ractive">
|
||||
<section id="current_talk">
|
||||
<h4>В момента</h4>
|
||||
<h2>{{currentEvent.title}}</h2>
|
||||
<p>{{currentEvent.abstract}}</p>
|
||||
<h3>At the Moment</h3>
|
||||
<h1>{{currentEvent.title}}</h1>
|
||||
<p>{{currentEvent.description}}</p>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script id="speaker_template" type="text/ractive">
|
||||
<script id="current_speaker_template" type="text/ractive">
|
||||
<section>
|
||||
<h4>Лектор</h4>
|
||||
<h2>{{name}}</h2>
|
||||
<h3>Speaker</h3>
|
||||
<h1>{{name}}</h1>
|
||||
<p>{{description}}</p>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script id="next_speaker_template" type="text/ractive">
|
||||
<section>
|
||||
<h3>Next Speaker</h3>
|
||||
<h1>{{name}}</h1>
|
||||
<p>{{description}}</p>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script id="next_talk_template" type="text/ractive">
|
||||
<section id="next_talk">
|
||||
<h4>Следва</h4>
|
||||
<h2>{{nextEvent.title}}</h2>
|
||||
<p>{{nextEvent.abstract}}</p>
|
||||
<h5><i>({{nextEvent.startTime.from(now)}})</i></h5>
|
||||
<h3>Next</h3>
|
||||
<h1>{{nextEvent.title}}</h1>
|
||||
<p>{{nextEvent.description}}</p>
|
||||
<h4>({{nextEvent.startTime.fromNow()}})</h4>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script id="slides_template" type="text/ractive">
|
||||
<section data-state="update-safe">
|
||||
<img src="logo.png">
|
||||
<h1>YAPC::EU</h1>
|
||||
<h2>Sofia 2014</h2>
|
||||
</section>
|
||||
|
||||
{{#eventCount}}
|
||||
|
@ -111,7 +115,7 @@
|
|||
{{/currentEvent}}
|
||||
|
||||
{{#currentEvent.speakers}}
|
||||
{{> speaker_template}}
|
||||
{{> current_speaker_template}}
|
||||
{{/currentEvent.speakers}}
|
||||
|
||||
{{#nextEvent}}
|
||||
|
@ -119,24 +123,18 @@
|
|||
{{/nextEvent}}
|
||||
|
||||
{{#nextEvent.speakers}}
|
||||
{{> speaker_template}}
|
||||
{{> next_speaker_template}}
|
||||
{{/nextEvent.speakers}}
|
||||
</section>
|
||||
{{/eventCount}}
|
||||
|
||||
<section>
|
||||
<h1>#OpenFest2021</h1>
|
||||
<h2>в Twitter</h2>
|
||||
<h2>Tweet</h2>
|
||||
<h1>#yapceu</h1>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="ractive-init.js"></script>
|
||||
<script type="text/javascript" src="reveal-init.js"></script>
|
||||
<script type="text/javascript">
|
||||
// use for green screen background
|
||||
if ($.urlParam('background')) {
|
||||
$('body').css('background-color', $.urlParam('background'));
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,140 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>YAPC::EU Interlude</title>
|
||||
|
||||
<meta charset="utf-8">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/2.6.2/css/reveal.css">
|
||||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/2.6.2/css/theme/night.css">
|
||||
<link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Condensed:300italic,300,400italic,400,700italic,700&subset=latin,cyrillic">
|
||||
<link rel="stylesheet" type="text/css" href="styles.css">
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/2.6.2/lib/js/head.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/2.6.2/js/reveal.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.6.0/moment.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ractive.js/0.3.7/ractive.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>
|
||||
<script src="schedule-musala.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="reveal">
|
||||
<div class="slides">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script id="agenda_template" type="text/ractive">
|
||||
<section id="agenda">
|
||||
<table class="reveal">
|
||||
<tbody>
|
||||
{{#pastEvents}}
|
||||
<tr class="past_event">
|
||||
<td>{{startTime.format('HH:mm')}}</td>
|
||||
<td>{{title}}</td>
|
||||
<td>
|
||||
{{#speakers}}
|
||||
{{name}}
|
||||
{{/speakers}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/pastEvents}}
|
||||
|
||||
{{#nextEvent}}
|
||||
<tr class="next_event">
|
||||
<td>{{startTime.format('HH:mm')}}</td>
|
||||
<td>{{title}}</td>
|
||||
<td>
|
||||
{{#speakers}}
|
||||
{{name}}
|
||||
{{/speakers}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/nextEvent}}
|
||||
|
||||
{{#futureEvents}}
|
||||
<tr class="future_event">
|
||||
<td>{{startTime.format('HH:mm')}}</td>
|
||||
<td>{{title}}</td>
|
||||
<td>
|
||||
{{#speakers}}
|
||||
{{name}}
|
||||
{{/speakers}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/futureEvents}}
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script id="current_talk_template" type="text/ractive">
|
||||
<section id="current_talk">
|
||||
<h3>At the Moment</h3>
|
||||
<h1>{{currentEvent.title}}</h1>
|
||||
<p>{{currentEvent.description}}</p>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script id="current_speaker_template" type="text/ractive">
|
||||
<section>
|
||||
<h3>Speaker</h3>
|
||||
<h1>{{name}}</h1>
|
||||
<p>{{description}}</p>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script id="next_speaker_template" type="text/ractive">
|
||||
<section>
|
||||
<h3>Next Speaker</h3>
|
||||
<h1>{{name}}</h1>
|
||||
<p>{{description}}</p>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script id="next_talk_template" type="text/ractive">
|
||||
<section id="next_talk">
|
||||
<h3>Next</h3>
|
||||
<h1>{{nextEvent.title}}</h1>
|
||||
<p>{{nextEvent.description}}</p>
|
||||
<h4>({{nextEvent.startTime.fromNow()}})</h4>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script id="slides_template" type="text/ractive">
|
||||
<section data-state="update-safe">
|
||||
<h1>YAPC::EU</h1>
|
||||
<h2>Sofia 2014</h2>
|
||||
</section>
|
||||
|
||||
{{#eventCount}}
|
||||
<section>
|
||||
{{> agenda_template}}
|
||||
|
||||
{{#currentEvent}}
|
||||
{{> current_talk_template}}
|
||||
{{/currentEvent}}
|
||||
|
||||
{{#currentEvent.speakers}}
|
||||
{{> current_speaker_template}}
|
||||
{{/currentEvent.speakers}}
|
||||
|
||||
{{#nextEvent}}
|
||||
{{> next_talk_template}}
|
||||
{{/nextEvent}}
|
||||
|
||||
{{#nextEvent.speakers}}
|
||||
{{> next_speaker_template}}
|
||||
{{/nextEvent.speakers}}
|
||||
</section>
|
||||
{{/eventCount}}
|
||||
|
||||
<section>
|
||||
<h2>Tweet</h2>
|
||||
<h1>#yapceu</h1>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="ractive-init.js"></script>
|
||||
<script type="text/javascript" src="reveal-init.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -15,12 +15,9 @@ var reactive = new Ractive({
|
|||
});
|
||||
|
||||
function refreshEvent() {
|
||||
schedule.update();
|
||||
reactive.set({pastEvents: schedule.pastEvents(),
|
||||
currentEvent: schedule.currentEvent(),
|
||||
nextEvent: schedule.nextEvent(),
|
||||
futureEvents: schedule.futureEvents(),
|
||||
eventCount: schedule.allEvents().length,
|
||||
now: schedule.now(),
|
||||
room: schedule.room()});
|
||||
eventCount: schedule.allEvents().length});
|
||||
}
|
||||
|
|
|
@ -72,7 +72,10 @@ Reveal.initialize({
|
|||
|
||||
// Bounds for smallest/largest possible scale to apply to content
|
||||
minScale: 0.2,
|
||||
maxScale: 8.0
|
||||
maxScale: 8.0,
|
||||
|
||||
parallaxBackgroundImage: 'yapc.png',
|
||||
parallaxBackgroundSize: '1920px 1080px'
|
||||
});
|
||||
|
||||
Reveal.addEventListener('update-safe', function() {
|
||||
|
|
|
@ -0,0 +1,140 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>YAPC::EU Interlude</title>
|
||||
|
||||
<meta charset="utf-8">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/2.6.2/css/reveal.css">
|
||||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/2.6.2/css/theme/night.css">
|
||||
<link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Condensed:300italic,300,400italic,400,700italic,700&subset=latin,cyrillic">
|
||||
<link rel="stylesheet" type="text/css" href="styles.css">
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/2.6.2/lib/js/head.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/2.6.2/js/reveal.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.6.0/moment.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ractive.js/0.3.7/ractive.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>
|
||||
<script src="schedule-rodopi.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="reveal">
|
||||
<div class="slides">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script id="agenda_template" type="text/ractive">
|
||||
<section id="agenda">
|
||||
<table class="reveal">
|
||||
<tbody>
|
||||
{{#pastEvents}}
|
||||
<tr class="past_event">
|
||||
<td>{{startTime.format('HH:mm')}}</td>
|
||||
<td>{{title}}</td>
|
||||
<td>
|
||||
{{#speakers}}
|
||||
{{name}}
|
||||
{{/speakers}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/pastEvents}}
|
||||
|
||||
{{#nextEvent}}
|
||||
<tr class="next_event">
|
||||
<td>{{startTime.format('HH:mm')}}</td>
|
||||
<td>{{title}}</td>
|
||||
<td>
|
||||
{{#speakers}}
|
||||
{{name}}
|
||||
{{/speakers}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/nextEvent}}
|
||||
|
||||
{{#futureEvents}}
|
||||
<tr class="future_event">
|
||||
<td>{{startTime.format('HH:mm')}}</td>
|
||||
<td>{{title}}</td>
|
||||
<td>
|
||||
{{#speakers}}
|
||||
{{name}}
|
||||
{{/speakers}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/futureEvents}}
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script id="current_talk_template" type="text/ractive">
|
||||
<section id="current_talk">
|
||||
<h3>At the Moment</h3>
|
||||
<h1>{{currentEvent.title}}</h1>
|
||||
<p>{{currentEvent.description}}</p>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script id="current_speaker_template" type="text/ractive">
|
||||
<section>
|
||||
<h3>Speaker</h3>
|
||||
<h1>{{name}}</h1>
|
||||
<p>{{description}}</p>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script id="next_speaker_template" type="text/ractive">
|
||||
<section>
|
||||
<h3>Next Speaker</h3>
|
||||
<h1>{{name}}</h1>
|
||||
<p>{{description}}</p>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script id="next_talk_template" type="text/ractive">
|
||||
<section id="next_talk">
|
||||
<h3>Next</h3>
|
||||
<h1>{{nextEvent.title}}</h1>
|
||||
<p>{{nextEvent.description}}</p>
|
||||
<h4>({{nextEvent.startTime.fromNow()}})</h4>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script id="slides_template" type="text/ractive">
|
||||
<section data-state="update-safe">
|
||||
<h1>YAPC::EU</h1>
|
||||
<h2>Sofia 2014</h2>
|
||||
</section>
|
||||
|
||||
{{#eventCount}}
|
||||
<section>
|
||||
{{> agenda_template}}
|
||||
|
||||
{{#currentEvent}}
|
||||
{{> current_talk_template}}
|
||||
{{/currentEvent}}
|
||||
|
||||
{{#currentEvent.speakers}}
|
||||
{{> current_speaker_template}}
|
||||
{{/currentEvent.speakers}}
|
||||
|
||||
{{#nextEvent}}
|
||||
{{> next_talk_template}}
|
||||
{{/nextEvent}}
|
||||
|
||||
{{#nextEvent.speakers}}
|
||||
{{> next_speaker_template}}
|
||||
{{/nextEvent.speakers}}
|
||||
</section>
|
||||
{{/eventCount}}
|
||||
|
||||
<section>
|
||||
<h2>Tweet</h2>
|
||||
<h1>#yapceu</h1>
|
||||
</section>
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="ractive-init.js"></script>
|
||||
<script type="text/javascript" src="reveal-init.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,129 @@
|
|||
function Schedule() {
|
||||
var events = [];
|
||||
|
||||
this.addEvent = function(event) {
|
||||
events.push(event);
|
||||
events = _.sortBy(events, function(event) {
|
||||
return event.startTime.unix()
|
||||
});
|
||||
}
|
||||
|
||||
this.upcomingEvents = function() {
|
||||
return _.select(events, function(event) {
|
||||
return event.startTime.isAfter(moment());
|
||||
});
|
||||
}
|
||||
|
||||
this.nextEvent = function() {
|
||||
return _.first(this.upcomingEvents());
|
||||
}
|
||||
|
||||
this.currentEvent = function() {
|
||||
var latestEvent = _.last(this.pastEvents());
|
||||
var nextEvent = this.nextEvent();
|
||||
if (typeof nextEvent != 'undefined' && moment(nextEvent.startTime).subtract('minutes', 10).isAfter(moment())) {
|
||||
return latestEvent;
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
this.futureEvents = function() {
|
||||
return this.upcomingEvents().splice(1);
|
||||
}
|
||||
|
||||
this.pastEvents = function() {
|
||||
return _.select(events, function(event) {
|
||||
return event.startTime.isBefore(moment());
|
||||
});
|
||||
}
|
||||
|
||||
this.allEvents = function() {
|
||||
return events;
|
||||
}
|
||||
|
||||
this.addDelay = function(time) {
|
||||
_.each(this.upcomingEvents(), function(event, index, agenda) {
|
||||
event.startTime.add(time);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var schedule = new Schedule();
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'SyContent - Content in the Cloud with V8',
|
||||
startTime: moment({hour: 10, minute: 00}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Torsten Raudssus (Getty)',
|
||||
description: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Docker with Perl - an Introduction ',
|
||||
startTime: moment({hour: 11, minute: 00}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Denis Banovic (@bano99)',
|
||||
description: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Create your containers with perl',
|
||||
startTime: moment({hour: 11, minute: 30}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Marian Marinov (HackMan)',
|
||||
description: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Lunch 🍔',
|
||||
startTime: moment({hour: 12, minute: 20})
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Automatization Network infrastructure',
|
||||
startTime: moment({hour: 13, minute: 20}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Naim Shafiyev (shafiev)',
|
||||
description: 'The student of MIREA. Interests: GCC, Linux kernel, OpenBSD, PERL, Parrot, Catalyst, Search engines'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Building an AWS SDK for Perl',
|
||||
startTime: moment({hour: 13, minute: 50}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Jose Luis Martinez Torres',
|
||||
description: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Perl in the Cloud - Update',
|
||||
startTime: moment({hour: 14, minute: 50}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Denis Banovic (@bano99)',
|
||||
description: 'Denis Banovic has over 13 years of experience as a senior software developer, system administrator and team leader. Currently he is busy creating and implementing Cloud Applications for the tourism industry in Austria. In his spare time, Denis\' interests include rockets, photography, traveling and psychology.'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Coffee Break ☕',
|
||||
startTime: moment({hour: 15, minute: 40})
|
||||
});
|
|
@ -0,0 +1,139 @@
|
|||
function Schedule() {
|
||||
var events = [];
|
||||
|
||||
this.addEvent = function(event) {
|
||||
events.push(event);
|
||||
events = _.sortBy(events, function(event) {
|
||||
return event.startTime.unix()
|
||||
});
|
||||
}
|
||||
|
||||
this.upcomingEvents = function() {
|
||||
return _.select(events, function(event) {
|
||||
return event.startTime.isAfter(moment());
|
||||
});
|
||||
}
|
||||
|
||||
this.nextEvent = function() {
|
||||
return _.first(this.upcomingEvents());
|
||||
}
|
||||
|
||||
this.currentEvent = function() {
|
||||
var latestEvent = _.last(this.pastEvents());
|
||||
var nextEvent = this.nextEvent();
|
||||
if (typeof nextEvent != 'undefined' && moment(nextEvent.startTime).subtract('minutes', 10).isAfter(moment())) {
|
||||
return latestEvent;
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
this.futureEvents = function() {
|
||||
return this.upcomingEvents().splice(1);
|
||||
}
|
||||
|
||||
this.pastEvents = function() {
|
||||
return _.select(events, function(event) {
|
||||
return event.startTime.isBefore(moment());
|
||||
});
|
||||
}
|
||||
|
||||
this.allEvents = function() {
|
||||
return events;
|
||||
}
|
||||
|
||||
this.addDelay = function(time) {
|
||||
_.each(this.upcomingEvents(), function(event, index, agenda) {
|
||||
event.startTime.add(time);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var schedule = new Schedule();
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Using Perl for autogeneration physical formulas',
|
||||
startTime: moment({hour: 10, minute: 00}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Ignat Ignatov',
|
||||
description: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'SQL::Abstract::FromQuery',
|
||||
startTime: moment({hour: 10, minute: 30}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Laurent Dami (dami)',
|
||||
description: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Extreme (Elastic)Search',
|
||||
startTime: moment({hour: 11, minute: 00}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Borislav Nikolov (jackdoe)',
|
||||
description: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'SQL for accountants: understanding the beast via SpreadSheets',
|
||||
startTime: moment({hour: 11, minute: 30}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Peter Rabbitson (ribasushi)',
|
||||
description: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Lunch 🍔',
|
||||
startTime: moment({hour: 12, minute: 20})
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Recruitment in Perl - The State of the Perl Recruitment Market',
|
||||
startTime: moment({hour: 13, minute: 20}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Rick Deller',
|
||||
description: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Creative Perlmongership',
|
||||
startTime: moment({hour: 13, minute: 50}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Salve J. Nilsen (sjn)',
|
||||
description: 'One of the original Oslo.pm\'ers who seems to end up organizing stuff more often than hacking.'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'CSV made easier for end-users',
|
||||
startTime: moment({hour: 14, minute: 50}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'H.Merijn Brand (Tux)',
|
||||
description: 'Using mainly open source utilities and C to exchange data between sources, porting open source to commercial OSes and support the Open Source community as widely as possible. perl5 Configure pumpking and CSV wizard.'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Coffee Break ☕',
|
||||
startTime: moment({hour: 15, minute: 40})
|
||||
});
|
171
schedule.js
171
schedule.js
|
@ -1,53 +1,16 @@
|
|||
function Schedule(hallId, date, setPageTitle) {
|
||||
function Schedule() {
|
||||
var events = [];
|
||||
|
||||
var apiEndpointPrefix = 'https://cfp.openfest.org/api/conferences/8';
|
||||
|
||||
var pageTitle = 'OpenFest';
|
||||
var room = '';
|
||||
|
||||
var nextLectureDelayMinutes = 4; // show the current lecture as next for the first N minutes
|
||||
|
||||
$.getJSON(apiEndpointPrefix + '/halls.json', function(data) {
|
||||
room = data[hallId]['name']['bg'];
|
||||
if (room === undefined) {
|
||||
room = '';
|
||||
}
|
||||
this.addEvent = function(event) {
|
||||
events.push(event);
|
||||
events = _.sortBy(events, function(event) {
|
||||
return event.startTime.unix()
|
||||
});
|
||||
|
||||
this.update = function() {
|
||||
$.getJSON(apiEndpointPrefix + '/events.json', function(eventsData) {
|
||||
$.getJSON(apiEndpointPrefix + '/slots.json', function(slotsData) {
|
||||
$.each(slotsData, function(slotId, slot) {
|
||||
$.extend(eventsData[slot['event_id'].toString()], slot);
|
||||
$.extend(eventsData[slot['event_id'].toString()], {"slotId": slotId});
|
||||
});
|
||||
var scheduleEvents = $.map(eventsData, function(event, eventId) {
|
||||
event['id'] = eventId;
|
||||
event['startTime'] = moment(event['starts_at']);
|
||||
event['endTime'] = moment(event['ends_at']);
|
||||
event['hallId'] = event['hall_id'];
|
||||
|
||||
if (event['startTime'].date() !== date) {
|
||||
return null;
|
||||
}
|
||||
if (event['hallId'] !== hallId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return event;
|
||||
});
|
||||
|
||||
events = scheduleEvents.sort(function (a,b) {return a['startTime'].isBefore(b['startTime']) ? -1 : 1});
|
||||
});
|
||||
});
|
||||
this.setPageTitle();
|
||||
}
|
||||
|
||||
this.upcomingEvents = function() {
|
||||
var now = this.referenceTime();
|
||||
return _.select(events, function(event) {
|
||||
return event.startTime.isAfter(now);
|
||||
return event.startTime.isAfter(moment());
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -57,7 +20,8 @@ function Schedule(hallId, date, setPageTitle) {
|
|||
|
||||
this.currentEvent = function() {
|
||||
var latestEvent = _.last(this.pastEvents());
|
||||
if (typeof(latestEvent) != 'undefined' && latestEvent.endTime.isAfter(this.now())) {
|
||||
var nextEvent = this.nextEvent();
|
||||
if (typeof nextEvent != 'undefined' && moment(nextEvent.startTime).subtract('minutes', 10).isAfter(moment())) {
|
||||
return latestEvent;
|
||||
} else {
|
||||
return undefined;
|
||||
|
@ -69,9 +33,8 @@ function Schedule(hallId, date, setPageTitle) {
|
|||
}
|
||||
|
||||
this.pastEvents = function() {
|
||||
var now = this.referenceTime();
|
||||
return _.select(events, function(event) {
|
||||
return event.startTime.isBefore(now);
|
||||
return event.startTime.isBefore(moment());
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -79,38 +42,104 @@ function Schedule(hallId, date, setPageTitle) {
|
|||
return events;
|
||||
}
|
||||
|
||||
this.now = function() {
|
||||
now = $.urlParam("now");
|
||||
if (now) {
|
||||
return moment(now);
|
||||
} else {
|
||||
return moment();
|
||||
this.addDelay = function(time) {
|
||||
_.each(this.upcomingEvents(), function(event, index, agenda) {
|
||||
event.startTime.add(time);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
this.referenceTime = function() {
|
||||
return this.now().subtract(nextLectureDelayMinutes, 'minutes');
|
||||
}
|
||||
var schedule = new Schedule();
|
||||
|
||||
this.room = function() {
|
||||
return room;
|
||||
schedule.addEvent({
|
||||
title: 'Behind the scenes of a grown-up web application',
|
||||
startTime: moment({hour: 10, minute: 00}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Kerstin Puschke (titanoboa)',
|
||||
description: 'Kerstin Puschke is a software engineer living in Hamburg. As part of an awesome team, she contributes to the backend of XING, a social network for business professionals with about 14 million users.'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
this.setPageTitle = function() {
|
||||
if (setPageTitle) {
|
||||
$('title').text(pageTitle + " room=" + room + " date=" + date);
|
||||
}
|
||||
}
|
||||
schedule.addEvent({
|
||||
title: 'GOTO statement considered awesome',
|
||||
startTime: moment({hour: 10, minute: 30}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Carl Mäsak (masak)',
|
||||
description: 'Has been programming Perl since 2001. Found Perl 6 somewhere around 2004, and fell in love. Now doing a number of projects in Perl 5 and 6. A regular at #perl6, he often helps newcomers and does smallish tasks on the Perl 6 specs, test suite and on Rakudo and Niecza.'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
$.urlParam = function(name){
|
||||
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
|
||||
if (results==null){
|
||||
return null;
|
||||
}
|
||||
else{
|
||||
return results[1] || 0;
|
||||
}
|
||||
schedule.addEvent({
|
||||
title: 'C-Day Is Coming',
|
||||
startTime: moment({hour: 11}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'liz',
|
||||
description: 'Made some interesting modules, to be found at CPAN. Co-organiser YAPC::Europe::2001 in Amsterdam. Chairman of YAPC::Europe::Foundation (YEF)'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
var schedule = new Schedule(parseInt($.urlParam('roomId')), parseInt($.urlParam('date')), true);
|
||||
schedule.addEvent({
|
||||
title: 'Lunch',
|
||||
startTime: moment({hour: 12, minute: 20})
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Digest:SHA is broken',
|
||||
startTime: moment({hour: 13, minute: 20}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Mark Overmeer (markov)',
|
||||
description: 'Perl, Perl and UNIX'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Asynchronous Programming with Futures',
|
||||
startTime: moment({hour: 13, minute: 50}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Paul Evans (LeoNerd)',
|
||||
description: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Adventures in Perl 6 Asynchrony',
|
||||
startTime: moment({hour: 14, minute: 50}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Jonathan Worthington (jnthn)',
|
||||
description: 'In the Perl world, Jonathan is best known as one of the key developers of the Rakudo Perl 6 compiler. His work has focused on the object model, type system, multiple dispatch and signatures. He\'s a regular speaker in the European Perl Conference and Workshop scene, and finds any invite to come and speak and enjoy a few beers with the local Perl hackers hard to resist.'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Coffee Break',
|
||||
startTime: moment({hour: 15, minute: 40})
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Day 3 Keynote - The Joy In What We Do',
|
||||
startTime: moment({hour: 16, minute: 10}),
|
||||
speakers: [
|
||||
{
|
||||
name: 'Sawyer X',
|
||||
description: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
schedule.addEvent({
|
||||
title: 'Lightning Talks',
|
||||
startTime: moment({hour: 17, minute: 00}),
|
||||
});
|
||||
|
|
14
styles.css
14
styles.css
|
@ -2,7 +2,6 @@ body {
|
|||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
/* background-color: #06172A; */ /* BigBlueButton background */
|
||||
}
|
||||
|
||||
body,
|
||||
|
@ -14,16 +13,7 @@ body,
|
|||
.reveal h5,
|
||||
.reveal h6 {
|
||||
font-family: "Roboto Condensed", tahoma, verdana, arial, sans-serif;
|
||||
font-weight: bold;
|
||||
-webkit-text-stroke: 0.01em black;
|
||||
}
|
||||
|
||||
#background_video {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: -10000;
|
||||
opacity: 0.4;
|
||||
text-rendering: optimizeLegibility;
|
||||
}
|
||||
|
||||
.reveal section img {
|
||||
|
@ -37,7 +27,7 @@ tr.past_event {
|
|||
}
|
||||
|
||||
tr.next_event {
|
||||
color: #FFFF00;
|
||||
color: #EEEEEE;
|
||||
}
|
||||
|
||||
tr.future_event {
|
||||
|
|
Loading…
Reference in New Issue