Compare commits

..

13 Commits
master ... yapc

Author SHA1 Message Date
Petko Bordjukov c9ceb8407a Add schedule for day 3 for Vitosha 2014-08-24 08:58:07 +03:00
Petko Bordjukov a67e2795b1 Add schedule for Musala 2014-08-23 12:21:17 +03:00
Petko Bordjukov faa536a7d3 Add schedule for Rodopi 2014-08-23 12:09:34 +03:00
Petko Bordjukov 575d359fe3 Second day schedule for Vitosha 2014-08-23 09:48:32 +03:00
Petko Bordjukov 1c4bfa72f3 Schedule fixes 2014-08-22 12:50:59 +03:00
Petko Bordjukov efdab41b1a Add schedules for the other halls 2014-08-22 08:55:42 +03:00
Petko Bordjukov 038b8099fc Add a lightning emoji, too 2014-08-20 16:11:37 +03:00
Petko Bordjukov 0d1322fac4 More emoji!!! 2014-08-20 16:07:00 +03:00
Petko Bordjukov c7ea4fb8a7 Bump the background to full hd 2014-08-20 15:58:01 +03:00
Petko Bordjukov 221258f723 Tweak headings to work with coffee breaks/lunches etc 2014-08-20 14:54:05 +03:00
Petko Bordjukov fc09fef53c Turn on kerning and ligatures 2014-08-20 14:52:34 +03:00
Petko Bordjukov e5ac8c178a Tweak js and css 2014-08-20 14:36:12 +03:00
Petko Bordjukov 06e2a9d2bd Update for YAPC::EU 2014 2014-08-20 14:16:53 +03:00
13 changed files with 687 additions and 122 deletions

Binary file not shown.

Binary file not shown.

View File

@ -1,6 +1,6 @@
<html> <html>
<head> <head>
<title>OpenFest 2021</title> <title>YAPC::EU Interlude</title>
<meta charset="utf-8"> <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/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>
@ -24,12 +23,8 @@
</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}}
@ -74,32 +69,41 @@
<script id="current_talk_template" type="text/ractive"> <script id="current_talk_template" type="text/ractive">
<section id="current_talk"> <section id="current_talk">
<h4>В момента</h4> <h3>At the Moment</h3>
<h2>{{currentEvent.title}}</h2> <h1>{{currentEvent.title}}</h1>
<p>{{currentEvent.abstract}}</p> <p>{{currentEvent.description}}</p>
</section> </section>
</script> </script>
<script id="speaker_template" type="text/ractive"> <script id="current_speaker_template" type="text/ractive">
<section> <section>
<h4>Лектор</h4> <h3>Speaker</h3>
<h2>{{name}}</h2> <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> <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">
<h4>Следва</h4> <h3>Next</h3>
<h2>{{nextEvent.title}}</h2> <h1>{{nextEvent.title}}</h1>
<p>{{nextEvent.abstract}}</p> <p>{{nextEvent.description}}</p>
<h5><i>({{nextEvent.startTime.from(now)}})</i></h5> <h4>({{nextEvent.startTime.fromNow()}})</h4>
</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">
<img src="logo.png"> <h1>YAPC::EU</h1>
<h2>Sofia 2014</h2>
</section> </section>
{{#eventCount}} {{#eventCount}}
@ -111,7 +115,7 @@
{{/currentEvent}} {{/currentEvent}}
{{#currentEvent.speakers}} {{#currentEvent.speakers}}
{{> speaker_template}} {{> current_speaker_template}}
{{/currentEvent.speakers}} {{/currentEvent.speakers}}
{{#nextEvent}} {{#nextEvent}}
@ -119,24 +123,18 @@
{{/nextEvent}} {{/nextEvent}}
{{#nextEvent.speakers}} {{#nextEvent.speakers}}
{{> speaker_template}} {{> next_speaker_template}}
{{/nextEvent.speakers}} {{/nextEvent.speakers}}
</section> </section>
{{/eventCount}} {{/eventCount}}
<section> <section>
<h1>#OpenFest2021</h1> <h2>Tweet</h2>
<h2>в Twitter</h2> <h1>#yapceu</h1>
</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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

140
musala.html Normal file
View File

@ -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>

View File

@ -15,12 +15,9 @@ 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,7 +72,10 @@ 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() {

140
rodopi.html Normal file
View File

@ -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>

129
schedule-musala.js Normal file
View File

@ -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})
});

139
schedule-rodopi.js Normal file
View File

@ -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})
});

View File

@ -1,53 +1,16 @@
function Schedule(hallId, date, setPageTitle) { function Schedule() {
var events = []; var events = [];
var apiEndpointPrefix = 'https://cfp.openfest.org/api/conferences/8'; this.addEvent = function(event) {
events.push(event);
var pageTitle = 'OpenFest'; events = _.sortBy(events, function(event) {
var room = ''; return event.startTime.unix()
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(now); return event.startTime.isAfter(moment());
}); });
} }
@ -57,7 +20,8 @@ function Schedule(hallId, date, setPageTitle) {
this.currentEvent = function() { this.currentEvent = function() {
var latestEvent = _.last(this.pastEvents()); 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; return latestEvent;
} else { } else {
return undefined; return undefined;
@ -69,9 +33,8 @@ function Schedule(hallId, date, setPageTitle) {
} }
this.pastEvents = function() { this.pastEvents = function() {
var now = this.referenceTime();
return _.select(events, function(event) { 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; return events;
} }
this.now = function() { this.addDelay = function(time) {
now = $.urlParam("now"); _.each(this.upcomingEvents(), function(event, index, agenda) {
if (now) { event.startTime.add(time);
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);
}
} }
} }
$.urlParam = function(name){ var schedule = new Schedule();
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (results==null){
return null;
}
else{
return results[1] || 0;
}
}
var schedule = new Schedule(parseInt($.urlParam('roomId')), parseInt($.urlParam('date')), true); 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.'
}
]
});
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,7 +2,6 @@ body {
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
/* background-color: #06172A; */ /* BigBlueButton background */
} }
body, body,
@ -14,16 +13,7 @@ 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;
font-weight: bold; text-rendering: optimizeLegibility;
-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 {
@ -37,7 +27,7 @@ tr.past_event {
} }
tr.next_event { tr.next_event {
color: #FFFF00; color: #EEEEEE;
} }
tr.future_event { tr.future_event {

BIN
yapc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB