<commit_before>{% extends "p3/base.html" %}
{% load conference assopy_tags %}

{% block EXTRA_HEAD %}
<style>
/* layout */
.event { position: absolute; }
.hhmm { position: relative; }
.hhmm > div { position: absolute; }

.horizontal .hhmm { height: 20px; }
.horizontal.schedule { width: 3000px; }
.horizontal .track { position: relative; height: 75px; }
.horizontal .event.duration-15 { width: 50px; }
.horizontal .event.duration-30 { width: 100px; }
.horizontal .event.duration-45 { width: 150px; }
.horizontal .event.duration-60 { width: 200px; }
.horizontal .event.duration-75 { width: 250px; }
.horizontal .event.duration-90 { width: 300px; }
.horizontal .event.duration-240 { width: 800px; }
.horizontal .event.duration-480 { width: 1600px; }
.horizontal .time-0900 { left: 0; }
.horizontal .time-0930 { left: 100px; }
.horizontal .time-0945 { left: 150px; }
.horizontal .time-1030 { left: 300px; }
.horizontal .time-1115 { left: 450px; }
.horizontal .time-1215 { left: 650px; }
.horizontal .time-1300 { left: 800px; }
.horizontal .time-1315 { left: 850px; }
.horizontal .time-1430 { left: 1100px; }
.horizontal .time-1530 { left: 1300px; }
.horizontal .time-1630 { left: 1500px; }
.horizontal .time-1715 { left: 1650px; }
.horizontal .time-1815 { left: 1850px; }
.horizontal .time-1830 { left: 1900px; }
.horizontal .time-1930 { left: 2100px; }
.horizontal .event.tracks-1 { height: 75px; }
.horizontal .event.tracks-2 { height: 150px; }
.horizontal .event.tracks-3 { height: 225px; }
.horizontal .event.tracks-4 { height: 300px; }
.horizontal .event.tracks-5 { height: 375px; }
.horizontal .event.tracks-6 { height: 450px; }
.horizontal .event.tracks-7 { height: 525px; }
.horizontal .event.tracks-8 { height: 600px; }
.horizontal .track .title {
    position: absolute;
    left: -40px;
}

.vertical .hhmm {
    float: left;
    width: 40px;
    height: 720px;
}
.vertical.schedule { width: 3000px; }
.vertical.schedule:after {
    content: ' ';
    display: block;
    clear: both;
}
.vertical .track {
    position: relative;
    float: left;
    width: 190px;
    height: 720px;
}
.vertical .event {
    width: 100%;
}
.vertical .event.duration-15 { height: 15px; }
.vertical .event.duration-30 { height: 30px; }
.vertical .event.duration-45 { height: 45px; }
.vertical .event.duration-60 { height: 60px; }
.vertical .event.duration-75 { height: 75px; }
.vertical .event.duration-90 { height: 90px; }
.vertical .event.duration-240 { height: 240px; }
.vertical .event.duration-480 { height: 480px; }
.vertical .time-0900 { top: 15px; }
.vertical .time-0930 { top: 45px; }
.vertical .time-0945 { top: 60px; }
.vertical .time-1030 { top: 105px; }
.vertical .time-1115 { top: 150px; }
.vertical .time-1215 { top: 210px; }
.vertical .time-1300 { top: 255px; }
.vertical .time-1315 { top: 270px; }
.vertical .time-1430 { top: 345px; }
.vertical .time-1530 { top: 405px; }
.vertical .time-1630 { top: 465px; }
.vertical .time-1715 { top: 510px; }
.vertical .time-1815 { top: 570px; }
.vertical .time-1830 { top: 585px; }
.vertical .time-1930 { top: 645px; }
.vertical .event.tracks-1 { width: 190px; }
.vertical .event.tracks-2 { width: 380px; }
.vertical .event.tracks-3 { width: 570px; }
.vertical .event.tracks-4 { width: 760px; }
.vertical .event.tracks-5 { width: 950px; }
.vertical .event.tracks-6 { width: 1140px; }
.vertical .event.tracks-7 { width: 1330px; }
.vertical .event.tracks-8 { width: 1520px; }
.vertical .track .title {
    position: absolute;
    top: 0;
    text-align: center;
    width: 100%;
}

.event { z-index: 101; }
.event.special { z-index: 100; }

/* *********************** */

.event {
    overflow: hidden;

    -moz-box-sizing: border-box;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    border: 2px solid white;

    background: #FCFAD9;
    font-variant: small-caps;

    padding: 3px;

    -moz-transition: all 0.8s ease 0s;
    -webkit-transition: all 0.8s ease 0s;
    -o-transition: all 0.8s ease 0s;
}

.event.special {
    background: white url({{ STATIC_URL }}p5/i/empty-track.png) bottom left;
    font-size: 15px;
    text-align: center;
}

.event.special > div {
    margin-top: 100px;
}

.event .name {
    line-height: 14px;
    height: 28px;
    font-size: 11px;
    overflow: hidden;
}

.event.exposed {
    padding: 7px;
    z-index: 200;
    box-shadow: 0 3px 8px 0 #aaa;
    border: 4px solid white;
}
.event .maximized {
    display: none;
}
.event.exposed span.maximized {
    display: inline;
}
.event.exposed .maximized {
    display: block;
}

.event.exposed .name {
    height: auto;
    font-weight: bold;
    margin: 4px 0;
    font-size: 12px;
}

.event.exposed .hhmm {
    font-weight: bold;
}

.event .talk-level {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 3px;
    background: transparent;
    color: white;
}
.event .talk-level.beginner {
    background: #c9f76f;
}
.event .talk-level.intermediate {
    background: #679b00;
}
.event .talk-level.advanced {
    background: #a68000;
}

.event.exposed .talk-level {
    height: 20px;
}

.event .abstract {
    font-variant: normal;
    margin: 10px 0;
    line-height: 1.5em;
    height: 180px;
    overflow-y: auto;
}

.tools {
    position: absolute;
    right: 0;
    bottom: 3px;
}

.exposed .tools {
    bottom: 0;
    background: white;
    padding: 0 4px;
}

.tools > div, .event.exposed .tools > div.maximized {
    display: inline-block;
}

.tools button {
    background-color: transparent;
    padding: 0;
    margin: 0;
    border: 0;
    width: 16px;
    height: 16px;
    -webkit-box-shadow: none;
    -moz-box-shadow: none;
}

.talk-interest button {
    padding-left: 18px;
}
.talk-interest button.up {
    background: transparent url({{ STATIC_URL }}p5/i/icon-thumb-up.png) no-repeat left center;
}
.talk-interest button.up.active {
    background: transparent url({{ STATIC_URL }}p5/i/icon-thumb-up-lit.png) no-repeat left center;
}
.talk-interest button.down {
    background: transparent url({{ STATIC_URL }}p5/i/icon-thumb-down.png) no-repeat left center;
}
.talk-interest button.down.active {
    background: transparent url({{ STATIC_URL }}p5/i/icon-thumb-down-lit.png) no-repeat left center;
}
</style>
{% endblock %}

{% block BODY_ID %}schedule{% endblock %}

{% block MAIN_CONTENT %}
<section class="notice">
Beta version, small changes could be introduced to meet speakers' necessities.
</section>
{% comment %}
<nav id="schedule-navigator">
    <div class="opener closed"> </div>
    <div class="content">
        <div class="wrapper">
            <h3>Search</h3>
            <form class="search">
                <input name="q" value="" />
            </form>
            <h3>Show</h3>
            <form class="show-flags" action="" method="get">
                <label class="active"><input type="hidden" name="show-track-ita" value="1" />Italian Track</label>
                <label class="active"><input type="hidden" name="show-training" value="1" />Trainings</label>
                <label class="active"><input type="hidden" name="show-partner-program" value="1" />Partner Program</label>
                <label class="active"><input type="hidden" name="show-sprint" value="1" />Sprint</label>
            </form>
            <h3>Jump to</h3>
            <ul class="jump-list">
                {% for schedule in schedules %}
                <li><a href="#{{ schedule.slug }}">{{ schedule.date|date:"l d" }}</a></li>
                {% endfor %}
            </ul>
            <div class="button mini" style="margin-top: 10px;">
                <a href="{% url p3-schedule-list conference=CONFERENCE %}">List view</a>
            </div>
            <div class="button mini" style="margin-top: 10px;">
                <a href="{% url p3-my-schedule %}">My schedule</a>
            </div>
            <div class="button mini" style="margin-top: 10px;">
                <a href="{% url p3-schedule-speakers conference=CONFERENCE %}">Speakers list</a>
            </div>
            <a class="trigger-overlay schedule-help" href="/schedule-help">How to use</a>
        </div>
    </div>
</nav>
{% endcomment %}
<div class="page clearfix">
    {% user_votes as votes %}
    {% user_events_interest as einterests %}
    {% for sid, timet in timetables %}
        {% schedule_data sid as sdata %}
        {% timetable_slice timet start="09:00" as tt %}
        <div id="{{ sdata.slug }}" class="schedule vertical" data-conference="{{ sdata.conference }}">
            <h2>{{ sdata.date|date:"l, j F Y" }}</h2>
            <div class="hhmm">
                {% for time_, events in tt.iterOnTimes %}
                <div class="time-{{ time_|time:"Hi" }}"><span>{{ time_|time:"H" }}</span>:{{ time_|time:"i" }}</div>
                {% endfor %}
            </div>
            {% for track, events in tt.iterOnTracks %}
            <div class="track">
                <div class="title">{{ track }} Pizza Margherita</div>
                {% for e in events %}
                {% if e.tracks|length == 1 or e.tracks.0 == track %}
                {% with einterests|attrib_:e.id as interest %}
                <div class="event time-{{ e.time|time:"Hi" }} duration-{{ e.duration }} tracks-{{ e.tracks|length }} {{ e.tags|join:" " }}{% if interest %}{% if interest > 0 %}highlighted{% else %}shadowed{% endif %}{% endif %}" data-id="{{ e.id }}">
                    {% if e.talk %}
                    <div class="speakers">
                        <span class="maximized hhmm">{{ e.time|time:"H:i" }}</span>
                        {% for s in e.talk.speakers %}
                        <a href="{% url conference-profile slug=s.slug %}">{{ s.name|name_abbrv }}</a>{% if not forloop.last %}, {% endif %}
                        {% endfor %}
                        <span class="maximized">presents:</span>
                    </div>
                    <h3 class="name"><a href="{% url conference-talk slug=e.talk.slug %}">{{ e.name }}</a></h3>
                    <div class="talk-level {{ e.talk.level }}">&nbsp;<span class="maximized">{{ e.talk.level }}</span></div>
                    <div class="maximized all-tags">
                        {% for tag in e.talk.tags %}<span class="tag">{{ tag }}</span>{% endfor %}
                    </div>
                    <div class="maximized abstract cms"> </div>
                    {% else %}
                    <h3 class="name">{{ e.name }}</h3>
                    {% endif %}
                    <div class="tools">
                        {% if request.user.is_authenticated %}
                        {% if e.talk %}
                        <div class="maximized talk-vote">{% if votes|attrib_:e.talk.id %}{{ votes|attrib_:e.talk.id }}/10{% endif %}</div>
                        {% endif %}
                        <div class="talk-interest">
                            <button class="down {% if interest and interest < 0 %}active{% endif %}"></button>
                            <button class="up {% if interest and interest > 0 %}active{% endif %}"></button>
                        </div>
                        {% endif %}
                        {% comment %}
                        {% if ref in overbooked %}
                        <div class="room-full">
                            <img src="{{ STATIC_URL }}p5/i/warning.png" title="our estimate of attendance exceeds the room size" alt="warning" />
                        </div>
                        {% endif %}
                        {% endcomment %}
                    </div>
                </div>
                {% endwith %}
                {% endif %}
                {% endfor %}
            </div>
            {% endfor %}
        </div>
    {% comment %}
    <div id="{{ schedule.slug }}" class="schedule-wrapper"
        data-schedule-url="{% url conference-schedule conference=schedule.conference slug=schedule.slug %}"
        data-schedule-conference="{{ schedule.conference }}"
        data-schedule-slug="{{ schedule.slug }}">
        {% include "conference/schedule_body.html" %}
    </div>
    {% endcomment %}
    {% endfor %}
</div>
<script>
function expose(e) {
    e.addClass('exposed');
    var dim = e.data('original');
    if(!dim) {
        dim = {
            'width': e.outerWidth(),
            'height': e.outerHeight(),
            'left': parseInt(e.css('left')),
            'top': parseInt(e.css('top'))
        }
        e.data('original', dim);
    }
    e.width(Math.min(dim.width * 2, 800));
    e.height(dim.height * 4);
    e.css('left', Math.max(dim.left - dim.width/2, 0));
    e.css('top', Math.max(dim.top - dim.height/2, 0));
    e.trigger('exposed');
}
function unexpose(e) {
    e.removeClass('exposed');
    var dim = e.data('original');
    if(dim) {
        e.width(dim.width);
        e.height(dim.height);
        e.css('left', dim.left);
        e.css('top', dim.top);
    }
}
$('.event')
    .bind('click', function(ev) {
        var e = $(this);
        if(e.hasClass('exposed') && !$(ev.target).hasClass('event'))
            return;
        $('.exposed')
            .not(e)
            .each(function() { unexpose($(this)) });
        if(e.hasClass('exposed')) {
            unexpose(e);
        }
        else {
            expose(e);
        }
    })
    .bind('exposed', function(ev) {
        var e = $(this);
        if(!e.data('loaded')) {
            var talk = $('h3.name a', e).attr('href');
            if(talk) {
                var ab = $('.abstract', e)
                    .text('loading...');
                $.ajax({
                    url: talk + '.xml',
                    dataType: 'xml',
                    success: function(data, text, xhr) {
                        ab.html($('talk abstract', data).html());
                    }
                });
            }
            e.data('loaded', 1);
        }
    })
    .find('.talk-interest button')
        .bind('click', function(ev) {
            var base = "{% url conference-schedule-event-interest conference="_C_" slug="_S_" eid="0" %}"
            var e = $(this);
            var sch = e.parents('.schedule');
            var evt = e.parents('.event');
            var url = base
                .replace('0', evt.attr('data-id'))
                .replace('_S_', sch.attr('id'))
                .replace('_C_', sch.attr('data-conference'));
            var up = e.hasClass('up');
            if(!e.hasClass('active')) {
                var val = up ? 1 : -1;
            }
            else {
                var val = 0;
            }
            $.ajax({
                url: url,
                type: 'POST',
                data: {
                    interest: val
                },
                success: function() {
                    evt.removeClass('highlighted shadowed');
                    var wrap = e.parents('.talk-interest');
                    $('button', wrap).removeClass('active');
                    if(val > 0) {
                        $('button.up', wrap).addClass('active');
                        evt.addClass('highlighted');
                    }
                    else if(val < 0) {
                        $('button.down', wrap).addClass('active');
                        evt.addClass('shadowed');
                    }
                }
            });
            return false;
        })
</script>
{% endblock %}

{% block SPONSORS %}
{% comment %}Omit sponsors col{% endcomment %}
{% endblock %}
<commit_msg>tweak dimensioni schedule<commit_after>{% extends "p3/base.html" %}
{% load conference assopy_tags %}

{% block EXTRA_HEAD %}
<style>
/* layout */
.event { position: absolute; }
.hhmm { position: relative; }
.hhmm > div { position: absolute; }

.horizontal .hhmm { height: 20px; }
.horizontal.schedule { width: 3000px; }
.horizontal .track { position: relative; height: 75px; }
.horizontal .event.duration-15 { width: 50px; }
.horizontal .event.duration-30 { width: 100px; }
.horizontal .event.duration-45 { width: 150px; }
.horizontal .event.duration-60 { width: 200px; }
.horizontal .event.duration-75 { width: 250px; }
.horizontal .event.duration-90 { width: 300px; }
.horizontal .event.duration-240 { width: 800px; }
.horizontal .event.duration-480 { width: 1600px; }
.horizontal .time-0900 { left: 0; }
.horizontal .time-0930 { left: 100px; }
.horizontal .time-0945 { left: 150px; }
.horizontal .time-1030 { left: 300px; }
.horizontal .time-1115 { left: 450px; }
.horizontal .time-1215 { left: 650px; }
.horizontal .time-1300 { left: 800px; }
.horizontal .time-1315 { left: 850px; }
.horizontal .time-1430 { left: 1100px; }
.horizontal .time-1530 { left: 1300px; }
.horizontal .time-1630 { left: 1500px; }
.horizontal .time-1715 { left: 1650px; }
.horizontal .time-1815 { left: 1850px; }
.horizontal .time-1830 { left: 1900px; }
.horizontal .time-1930 { left: 2100px; }
.horizontal .event.tracks-1 { height: 75px; }
.horizontal .event.tracks-2 { height: 150px; }
.horizontal .event.tracks-3 { height: 225px; }
.horizontal .event.tracks-4 { height: 300px; }
.horizontal .event.tracks-5 { height: 375px; }
.horizontal .event.tracks-6 { height: 450px; }
.horizontal .event.tracks-7 { height: 525px; }
.horizontal .event.tracks-8 { height: 600px; }
.horizontal .track .title {
    position: absolute;
    left: -40px;
}

.vertical .hhmm {
    float: left;
    width: 40px;
    height: 735px;
}
.vertical.schedule { width: 1400px; }
.vertical.schedule:after {
    content: ' ';
    display: block;
    clear: both;
}
.vertical .track {
    position: relative;
    float: left;
    width: 190px;
    height: 735px;
}
.vertical .event {
    width: 100%;
}
.vertical .event.duration-15 { height: 15px; }
.vertical .event.duration-30 { height: 30px; }
.vertical .event.duration-45 { height: 45px; }
.vertical .event.duration-60 { height: 60px; }
.vertical .event.duration-75 { height: 75px; }
.vertical .event.duration-90 { height: 90px; }
.vertical .event.duration-240 { height: 240px; }
.vertical .event.duration-480 { height: 480px; }
.vertical .time-0900 { top: 15px; }
.vertical .time-0930 { top: 45px; }
.vertical .time-0945 { top: 60px; }
.vertical .time-1030 { top: 105px; }
.vertical .time-1115 { top: 150px; }
.vertical .time-1215 { top: 210px; }
.vertical .time-1300 { top: 255px; }
.vertical .time-1315 { top: 270px; }
.vertical .time-1430 { top: 345px; }
.vertical .time-1530 { top: 405px; }
.vertical .time-1630 { top: 465px; }
.vertical .time-1715 { top: 510px; }
.vertical .time-1815 { top: 570px; }
.vertical .time-1830 { top: 585px; }
.vertical .time-1930 { top: 645px; }
.vertical .event.tracks-1 { width: 190px; }
.vertical .event.tracks-2 { width: 380px; }
.vertical .event.tracks-3 { width: 570px; }
.vertical .event.tracks-4 { width: 760px; }
.vertical .event.tracks-5 { width: 950px; }
.vertical .event.tracks-6 { width: 1140px; }
.vertical .event.tracks-7 { width: 1330px; }
.vertical .event.tracks-8 { width: 1520px; }
.vertical .track .title {
    position: absolute;
    top: 0;
    text-align: center;
    width: 100%;
}

.event { z-index: 101; }
.event.special { z-index: 100; }

/* *********************** */

.event {
    overflow: hidden;

    -moz-box-sizing: border-box;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    border: 2px solid white;

    background: #FCFAD9;
    font-variant: small-caps;

    padding: 3px;

    -moz-transition: all 0.8s ease 0s;
    -webkit-transition: all 0.8s ease 0s;
    -o-transition: all 0.8s ease 0s;
}

.event.special {
    background: white url({{ STATIC_URL }}p5/i/empty-track.png) bottom left;
    font-size: 15px;
    text-align: center;
}

.event.special > div {
    margin-top: 100px;
}

.event .name {
    line-height: 14px;
    height: 28px;
    font-size: 11px;
    overflow: hidden;
}

.event.exposed {
    padding: 7px;
    z-index: 200;
    box-shadow: 0 3px 8px 0 #aaa;
    border: 4px solid white;
}
.event .maximized {
    display: none;
}
.event.exposed span.maximized {
    display: inline;
}
.event.exposed .maximized {
    display: block;
}

.event.exposed .name {
    height: auto;
    font-weight: bold;
    margin: 4px 0;
    font-size: 12px;
}

.event.exposed .hhmm {
    font-weight: bold;
}

.event .talk-level {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 3px;
    background: transparent;
    color: white;
}
.event .talk-level.beginner {
    background: #c9f76f;
}
.event .talk-level.intermediate {
    background: #679b00;
}
.event .talk-level.advanced {
    background: #a68000;
}

.event.exposed .talk-level {
    height: 20px;
}

.event .abstract {
    font-variant: normal;
    margin: 10px 0;
    line-height: 1.5em;
    height: 180px;
    overflow-y: auto;
}

.tools {
    position: absolute;
    right: 0;
    bottom: 3px;
}

.exposed .tools {
    bottom: 0;
    background: white;
    padding: 0 4px;
}

.tools > div, .event.exposed .tools > div.maximized {
    display: inline-block;
}

.tools button {
    background-color: transparent;
    padding: 0;
    margin: 0;
    border: 0;
    width: 16px;
    height: 16px;
    -webkit-box-shadow: none;
    -moz-box-shadow: none;
}

.talk-interest button {
    padding-left: 18px;
}
.talk-interest button.up {
    background: transparent url({{ STATIC_URL }}p5/i/icon-thumb-up.png) no-repeat left center;
}
.talk-interest button.up.active {
    background: transparent url({{ STATIC_URL }}p5/i/icon-thumb-up-lit.png) no-repeat left center;
}
.talk-interest button.down {
    background: transparent url({{ STATIC_URL }}p5/i/icon-thumb-down.png) no-repeat left center;
}
.talk-interest button.down.active {
    background: transparent url({{ STATIC_URL }}p5/i/icon-thumb-down-lit.png) no-repeat left center;
}
</style>
{% endblock %}

{% block BODY_ID %}schedule{% endblock %}

{% block MAIN_CONTENT %}
<section class="notice">
Beta version, small changes could be introduced to meet speakers' necessities.
</section>
{% comment %}
<nav id="schedule-navigator">
    <div class="opener closed"> </div>
    <div class="content">
        <div class="wrapper">
            <h3>Search</h3>
            <form class="search">
                <input name="q" value="" />
            </form>
            <h3>Show</h3>
            <form class="show-flags" action="" method="get">
                <label class="active"><input type="hidden" name="show-track-ita" value="1" />Italian Track</label>
                <label class="active"><input type="hidden" name="show-training" value="1" />Trainings</label>
                <label class="active"><input type="hidden" name="show-partner-program" value="1" />Partner Program</label>
                <label class="active"><input type="hidden" name="show-sprint" value="1" />Sprint</label>
            </form>
            <h3>Jump to</h3>
            <ul class="jump-list">
                {% for schedule in schedules %}
                <li><a href="#{{ schedule.slug }}">{{ schedule.date|date:"l d" }}</a></li>
                {% endfor %}
            </ul>
            <div class="button mini" style="margin-top: 10px;">
                <a href="{% url p3-schedule-list conference=CONFERENCE %}">List view</a>
            </div>
            <div class="button mini" style="margin-top: 10px;">
                <a href="{% url p3-my-schedule %}">My schedule</a>
            </div>
            <div class="button mini" style="margin-top: 10px;">
                <a href="{% url p3-schedule-speakers conference=CONFERENCE %}">Speakers list</a>
            </div>
            <a class="trigger-overlay schedule-help" href="/schedule-help">How to use</a>
        </div>
    </div>
</nav>
{% endcomment %}
<div class="page clearfix">
    {% user_votes as votes %}
    {% user_events_interest as einterests %}
    {% for sid, timet in timetables %}
        {% schedule_data sid as sdata %}
        {% timetable_slice timet start="09:00" as tt %}
        <div id="{{ sdata.slug }}" class="schedule vertical" data-conference="{{ sdata.conference }}">
            <h2>{{ sdata.date|date:"l, j F Y" }}</h2>
            <div class="hhmm">
                {% for time_, events in tt.iterOnTimes %}
                <div class="time-{{ time_|time:"Hi" }}"><span>{{ time_|time:"H" }}</span>:{{ time_|time:"i" }}</div>
                {% endfor %}
            </div>
            {% for track, events in tt.iterOnTracks %}
            <div class="track">
                <div class="title">{{ track }} Pizza Margherita</div>
                {% for e in events %}
                {% if e.tracks|length == 1 or e.tracks.0 == track %}
                {% with einterests|attrib_:e.id as interest %}
                <div class="event time-{{ e.time|time:"Hi" }} duration-{{ e.duration }} tracks-{{ e.tracks|length }} {{ e.tags|join:" " }}{% if interest %}{% if interest > 0 %}highlighted{% else %}shadowed{% endif %}{% endif %}" data-id="{{ e.id }}">
                    {% if e.talk %}
                    <div class="speakers">
                        <span class="maximized hhmm">{{ e.time|time:"H:i" }}</span>
                        {% for s in e.talk.speakers %}
                        <a href="{% url conference-profile slug=s.slug %}">{{ s.name|name_abbrv }}</a>{% if not forloop.last %}, {% endif %}
                        {% endfor %}
                        <span class="maximized">presents:</span>
                    </div>
                    <h3 class="name"><a href="{% url conference-talk slug=e.talk.slug %}">{{ e.name }}</a></h3>
                    <div class="talk-level {{ e.talk.level }}">&nbsp;<span class="maximized">{{ e.talk.level }}</span></div>
                    <div class="maximized all-tags">
                        {% for tag in e.talk.tags %}<span class="tag">{{ tag }}</span>{% endfor %}
                    </div>
                    <div class="maximized abstract cms"> </div>
                    {% else %}
                    <h3 class="name">{{ e.name }}</h3>
                    {% endif %}
                    <div class="tools">
                        {% if request.user.is_authenticated %}
                        {% if e.talk %}
                        <div class="maximized talk-vote">{% if votes|attrib_:e.talk.id %}{{ votes|attrib_:e.talk.id }}/10{% endif %}</div>
                        {% endif %}
                        <div class="talk-interest">
                            <button class="down {% if interest and interest < 0 %}active{% endif %}"></button>
                            <button class="up {% if interest and interest > 0 %}active{% endif %}"></button>
                        </div>
                        {% endif %}
                        {% comment %}
                        {% if ref in overbooked %}
                        <div class="room-full">
                            <img src="{{ STATIC_URL }}p5/i/warning.png" title="our estimate of attendance exceeds the room size" alt="warning" />
                        </div>
                        {% endif %}
                        {% endcomment %}
                    </div>
                </div>
                {% endwith %}
                {% endif %}
                {% endfor %}
            </div>
            {% endfor %}
        </div>
    {% comment %}
    <div id="{{ schedule.slug }}" class="schedule-wrapper"
        data-schedule-url="{% url conference-schedule conference=schedule.conference slug=schedule.slug %}"
        data-schedule-conference="{{ schedule.conference }}"
        data-schedule-slug="{{ schedule.slug }}">
        {% include "conference/schedule_body.html" %}
    </div>
    {% endcomment %}
    {% endfor %}
</div>
<script>
function expose(e) {
    e.addClass('exposed');
    var dim = e.data('original');
    if(!dim) {
        dim = {
            'width': e.outerWidth(),
            'height': e.outerHeight(),
            'left': parseInt(e.css('left')),
            'top': parseInt(e.css('top'))
        }
        e.data('original', dim);
    }
    e.width(Math.min(dim.width * 2, 800));
    e.height(dim.height * 4);
    e.css('left', Math.max(dim.left - dim.width/2, 0));
    e.css('top', Math.max(dim.top - dim.height/2, 0));
    e.trigger('exposed');
}
function unexpose(e) {
    e.removeClass('exposed');
    var dim = e.data('original');
    if(dim) {
        e.width(dim.width);
        e.height(dim.height);
        e.css('left', dim.left);
        e.css('top', dim.top);
    }
}
$('.event')
    .bind('click', function(ev) {
        var e = $(this);
        if(e.hasClass('exposed') && !$(ev.target).hasClass('event'))
            return;
        $('.exposed')
            .not(e)
            .each(function() { unexpose($(this)) });
        if(e.hasClass('exposed')) {
            unexpose(e);
        }
        else {
            expose(e);
        }
    })
    .bind('exposed', function(ev) {
        var e = $(this);
        if(!e.data('loaded')) {
            var talk = $('h3.name a', e).attr('href');
            if(talk) {
                var ab = $('.abstract', e)
                    .text('loading...');
                $.ajax({
                    url: talk + '.xml',
                    dataType: 'xml',
                    success: function(data, text, xhr) {
                        ab.html($('talk abstract', data).html());
                    }
                });
            }
            e.data('loaded', 1);
        }
    })
    .find('.talk-interest button')
        .bind('click', function(ev) {
            var base = "{% url conference-schedule-event-interest conference="_C_" slug="_S_" eid="0" %}"
            var e = $(this);
            var sch = e.parents('.schedule');
            var evt = e.parents('.event');
            var url = base
                .replace('0', evt.attr('data-id'))
                .replace('_S_', sch.attr('id'))
                .replace('_C_', sch.attr('data-conference'));
            var up = e.hasClass('up');
            if(!e.hasClass('active')) {
                var val = up ? 1 : -1;
            }
            else {
                var val = 0;
            }
            $.ajax({
                url: url,
                type: 'POST',
                data: {
                    interest: val
                },
                success: function() {
                    evt.removeClass('highlighted shadowed');
                    var wrap = e.parents('.talk-interest');
                    $('button', wrap).removeClass('active');
                    if(val > 0) {
                        $('button.up', wrap).addClass('active');
                        evt.addClass('highlighted');
                    }
                    else if(val < 0) {
                        $('button.down', wrap).addClass('active');
                        evt.addClass('shadowed');
                    }
                }
            });
            return false;
        })
</script>
{% endblock %}

{% block SPONSORS %}
{% comment %}Omit sponsors col{% endcomment %}
{% endblock %}

{'fraction_non_alphanumeric': 0.17053409385532797, 'fraction_numerical': 0.034482758620689655, 'mean_word_length': 1.9278868962899707, 'pattern_counts': {'":': 0, '<': 235, '<?xml version=': 0, '>': 245, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 4}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1772921', 'n_tokens_mistral': 10935, 'n_tokens_neox': 9602, 'n_words': 2280}