Compare commits

..

13 Commits
yapc ... master

Author SHA1 Message Date
Tocho Tochev 1cf6847d18 Add green screen support 2021-08-11 16:57:10 +03:00
Tocho Tochev aea60ac5a7 Change to OpenFest2021 2021-08-08 14:13:13 +03:00
Petko Bordjukov 5801f6581b
Merge pull request #2 from tochev/master
Modify interlude for OpenFest2020 and clarion
2020-11-14 19:52:22 +02:00
Tocho Tochev e411b8d037 Modify interlude for OpenFest2020 and clarion 2020-11-06 16:47:52 +02:00
Petko Bordjukov b6ae81d2e9 Merge pull request #1 from user890104/openfest-2016
Modify interlude for OpenFest 2016
2016-11-14 23:33:51 +02:00
Vencislav Atanasov c355c4c655 Modify interlude for OpenFest 2016 2016-11-04 16:51:20 +02:00
Petko Bordjukov e8f8632530 Remove debugging artifact 2015-08-12 21:23:52 +03:00
Petko Bordjukov 0dcfa7efa0 Merge branch 'ittour-json-export' 2015-08-12 21:18:35 +03:00
Petko Bordjukov dc11a85f41 Calculate end time from next event's start time 2015-08-12 21:17:46 +03:00
Petko Bordjukov baa7ec4b66 Update for VarnaConf 2015-08-12 21:17:43 +03:00
Petko Bordjukov d67539e16a Update the schedule 2015-08-12 21:03:48 +03:00
Petko Bordjukov cd3f9b93a7 Update for BurgasConf 2015 2015-07-04 19:19:52 +03:00
Petko Bordjukov 8e6238c014 Add missing check 2015-07-04 19:19:35 +03:00
13 changed files with 122 additions and 687 deletions

BIN
background.mp4 Normal file

Binary file not shown.

BIN
cropped-background.mp4 Normal file

Binary file not shown.

View File

@ -1,6 +1,6 @@
<html> <html>
<head> <head>
<title>YAPC::EU Interlude</title> <title>OpenFest 2021</title>
<meta charset="utf-8"> <meta charset="utf-8">
@ -13,6 +13,7 @@
<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/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/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/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/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="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>
<script src="schedule.js"></script> <script src="schedule.js"></script>
@ -23,8 +24,12 @@
</div> </div>
</div> </div>
<!-- <video id="background_video" src="background.mp4" loop autoplay /> -->
<!-- TODO: fix display of speakers -->
<script id="agenda_template" type="text/ractive"> <script id="agenda_template" type="text/ractive">
<section id="agenda"> <section id="agenda">
<h3>{{room}}</h3>
<table class="reveal"> <table class="reveal">
<tbody> <tbody>
{{#pastEvents}} {{#pastEvents}}
@ -69,41 +74,32 @@
<script id="current_talk_template" type="text/ractive"> <script id="current_talk_template" type="text/ractive">
<section id="current_talk"> <section id="current_talk">
<h3>At the Moment</h3> <h4>В момента</h4>
<h1>{{currentEvent.title}}</h1> <h2>{{currentEvent.title}}</h2>
<p>{{currentEvent.description}}</p> <p>{{currentEvent.abstract}}</p>
</section> </section>
</script> </script>
<script id="current_speaker_template" type="text/ractive"> <script id="speaker_template" type="text/ractive">
<section> <section>
<h3>Speaker</h3> <h4>Лектор</h4>
<h1>{{name}}</h1> <h2>{{name}}</h2>
<p>{{description}}</p>
</section>
</script>
<script id="next_speaker_template" type="text/ractive">
<section>
<h3>Next Speaker</h3>
<h1>{{name}}</h1>
<p>{{description}}</p> <p>{{description}}</p>
</section> </section>
</script> </script>
<script id="next_talk_template" type="text/ractive"> <script id="next_talk_template" type="text/ractive">
<section id="next_talk"> <section id="next_talk">
<h3>Next</h3> <h4>Следва</h4>
<h1>{{nextEvent.title}}</h1> <h2>{{nextEvent.title}}</h2>
<p>{{nextEvent.description}}</p> <p>{{nextEvent.abstract}}</p>
<h4>({{nextEvent.startTime.fromNow()}})</h4> <h5><i>({{nextEvent.startTime.from(now)}})</i></h5>
</section> </section>
</script> </script>
<script id="slides_template" type="text/ractive"> <script id="slides_template" type="text/ractive">
<section data-state="update-safe"> <section data-state="update-safe">
<h1>YAPC::EU</h1> <img src="logo.png">
<h2>Sofia 2014</h2>
</section> </section>
{{#eventCount}} {{#eventCount}}
@ -115,7 +111,7 @@
{{/currentEvent}} {{/currentEvent}}
{{#currentEvent.speakers}} {{#currentEvent.speakers}}
{{> current_speaker_template}} {{> speaker_template}}
{{/currentEvent.speakers}} {{/currentEvent.speakers}}
{{#nextEvent}} {{#nextEvent}}
@ -123,18 +119,24 @@
{{/nextEvent}} {{/nextEvent}}
{{#nextEvent.speakers}} {{#nextEvent.speakers}}
{{> next_speaker_template}} {{> speaker_template}}
{{/nextEvent.speakers}} {{/nextEvent.speakers}}
</section> </section>
{{/eventCount}} {{/eventCount}}
<section> <section>
<h2>Tweet</h2> <h1>#OpenFest2021</h1>
<h1>#yapceu</h1> <h2>в Twitter</h2>
</section> </section>
</script> </script>
<script type="text/javascript" src="ractive-init.js"></script> <script type="text/javascript" src="ractive-init.js"></script>
<script type="text/javascript" src="reveal-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> </body>
</html> </html>

BIN
logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -1,140 +0,0 @@
<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>

View File

@ -15,9 +15,12 @@ var reactive = new Ractive({
}); });
function refreshEvent() { function refreshEvent() {
schedule.update();
reactive.set({pastEvents: schedule.pastEvents(), reactive.set({pastEvents: schedule.pastEvents(),
currentEvent: schedule.currentEvent(), currentEvent: schedule.currentEvent(),
nextEvent: schedule.nextEvent(), nextEvent: schedule.nextEvent(),
futureEvents: schedule.futureEvents(), futureEvents: schedule.futureEvents(),
eventCount: schedule.allEvents().length}); eventCount: schedule.allEvents().length,
now: schedule.now(),
room: schedule.room()});
} }

View File

@ -72,10 +72,7 @@ Reveal.initialize({
// Bounds for smallest/largest possible scale to apply to content // Bounds for smallest/largest possible scale to apply to content
minScale: 0.2, minScale: 0.2,
maxScale: 8.0, maxScale: 8.0
parallaxBackgroundImage: 'yapc.png',
parallaxBackgroundSize: '1920px 1080px'
}); });
Reveal.addEventListener('update-safe', function() { Reveal.addEventListener('update-safe', function() {

View File

@ -1,140 +0,0 @@
<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>

View File

@ -1,129 +0,0 @@
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})
});

View File

@ -1,139 +0,0 @@
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})
});

View File

@ -1,16 +1,53 @@
function Schedule() { function Schedule(hallId, date, setPageTitle) {
var events = []; var events = [];
this.addEvent = function(event) { var apiEndpointPrefix = 'https://cfp.openfest.org/api/conferences/8';
events.push(event);
events = _.sortBy(events, function(event) { var pageTitle = 'OpenFest';
return event.startTime.unix() 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.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() { this.upcomingEvents = function() {
var now = this.referenceTime();
return _.select(events, function(event) { return _.select(events, function(event) {
return event.startTime.isAfter(moment()); return event.startTime.isAfter(now);
}); });
} }
@ -20,8 +57,7 @@ function Schedule() {
this.currentEvent = function() { this.currentEvent = function() {
var latestEvent = _.last(this.pastEvents()); var latestEvent = _.last(this.pastEvents());
var nextEvent = this.nextEvent(); if (typeof(latestEvent) != 'undefined' && latestEvent.endTime.isAfter(this.now())) {
if (typeof nextEvent != 'undefined' && moment(nextEvent.startTime).subtract('minutes', 10).isAfter(moment())) {
return latestEvent; return latestEvent;
} else { } else {
return undefined; return undefined;
@ -33,8 +69,9 @@ function Schedule() {
} }
this.pastEvents = function() { this.pastEvents = function() {
var now = this.referenceTime();
return _.select(events, function(event) { return _.select(events, function(event) {
return event.startTime.isBefore(moment()); return event.startTime.isBefore(now);
}); });
} }
@ -42,104 +79,38 @@ function Schedule() {
return events; return events;
} }
this.addDelay = function(time) { this.now = function() {
_.each(this.upcomingEvents(), function(event, index, agenda) { now = $.urlParam("now");
event.startTime.add(time); if (now) {
}); return moment(now);
} else {
return moment();
}
}
this.referenceTime = function() {
return this.now().subtract(nextLectureDelayMinutes, 'minutes');
}
this.room = function() {
return room;
}
this.setPageTitle = function() {
if (setPageTitle) {
$('title').text(pageTitle + " room=" + room + " date=" + date);
}
} }
} }
var schedule = new Schedule(); $.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (results==null){
return null;
}
else{
return results[1] || 0;
}
}
schedule.addEvent({ var schedule = new Schedule(parseInt($.urlParam('roomId')), parseInt($.urlParam('date')), true);
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.'
}
]
});
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.'
}
]
});
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)'
}
]
});
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}),
});

View File

@ -2,6 +2,7 @@ body {
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
/* background-color: #06172A; */ /* BigBlueButton background */
} }
body, body,
@ -13,7 +14,16 @@ body,
.reveal h5, .reveal h5,
.reveal h6 { .reveal h6 {
font-family: "Roboto Condensed", tahoma, verdana, arial, sans-serif; font-family: "Roboto Condensed", tahoma, verdana, arial, sans-serif;
text-rendering: optimizeLegibility; font-weight: bold;
-webkit-text-stroke: 0.01em black;
}
#background_video {
position: absolute;
top: 0;
left: 0;
z-index: -10000;
opacity: 0.4;
} }
.reveal section img { .reveal section img {
@ -27,7 +37,7 @@ tr.past_event {
} }
tr.next_event { tr.next_event {
color: #EEEEEE; color: #FFFF00;
} }
tr.future_event { tr.future_event {

BIN
yapc.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB