Upgrades to summit video pages

Conflicts:

	openstack/code/Presentation.php
	openstack/code/PresentationCategoryPage.php
	openstack/code/summit/SchedToolsPage.php
	themes/openstack/templates/Layout/PresentationCategoryPage.ss
	themes/openstack/templates/Layout/PresentationCategoryPage_presentation.ss
This commit is contained in:
Todd Morey 2014-10-31 12:48:27 -05:00 committed by Sebastian Marcet
parent 0b7ca90b7c
commit 885cc431c9
8 changed files with 801 additions and 353 deletions

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* Copyright 2014 Openstack Foundation * Copyright 2014 Openstack Foundation
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
@ -11,7 +12,8 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
**/ **/
class Presentation extends DataObject { class Presentation extends DataObject
{
static $db = array( static $db = array(
'Name' => 'HTMLText', 'Name' => 'HTMLText',
@ -28,7 +30,8 @@ class Presentation extends DataObject {
'Type' => 'Text', 'Type' => 'Text',
'Day' => 'Int', 'Day' => 'Int',
'Speakers' => 'Text', 'Speakers' => 'Text',
'SlidesLink' => 'Varchar(255)' 'SlidesLink' => 'Varchar(255)',
'event_key' => 'Varchar(255)'
); );
Static $defaults = array( Static $defaults = array(
@ -52,7 +55,8 @@ class Presentation extends DataObject {
'Name' => 'Presentation Name' 'Name' => 'Presentation Name'
); );
function getCMSFields() { function getCMSFields()
{
$fields = new FieldList ( $fields = new FieldList (
new TextField('Name', 'Name of Presentation'), new TextField('Name', 'Name of Presentation'),
new TextField('Speakers', 'Speakers'), new TextField('Speakers', 'Speakers'),
@ -69,18 +73,28 @@ class Presentation extends DataObject {
return $fields; return $fields;
} }
function FormattedStartTime()
{
$Date = new DateTime($this->StartTime);
return $Date->format('l h:i a');
}
function onBeforeWrite() { function PresentationDay()
{
$Date = new DateTime($this->StartTime);
return $Date->format('M d');
}
function onBeforeWrite()
{
parent::onBeforeWrite(); parent::onBeforeWrite();
// If there is no URLSegment set, generate one from Title // If there is no URLSegment set, generate one from Title
if((!$this->URLSegment || $this->URLSegment == 'new-presentation') && $this->Title != 'New Presentation') if ((!$this->URLSegment || $this->URLSegment == 'new-presentation') && $this->Title != 'New Presentation') {
{
$this->URLSegment = SiteTree::generateURLSegment($this->Title); $this->URLSegment = SiteTree::generateURLSegment($this->Title);
} } else if ($this->isChanged('URLSegment')) {
else if($this->isChanged('URLSegment'))
{
// Make sure the URLSegment is valid for use in a URL // Make sure the URLSegment is valid for use in a URL
$segment = preg_replace('/[^A-Za-z0-9]+/', '-', $this->URLSegment); $segment = preg_replace('/[^A-Za-z0-9]+/', '-', $this->URLSegment);
$segment = preg_replace('/-+/', '-', $segment); $segment = preg_replace('/-+/', '-', $segment);
@ -94,41 +108,40 @@ class Presentation extends DataObject {
// Ensure that this object has a non-conflicting URLSegment value by appending number if needed // Ensure that this object has a non-conflicting URLSegment value by appending number if needed
$count = 2; $count = 2;
while($this->LookForExistingURLSegment($this->URLSegment)) while ($this->LookForExistingURLSegment($this->URLSegment)) {
{
$this->URLSegment = preg_replace('/-[0-9]+$/', null, $this->URLSegment) . '-' . $count; $this->URLSegment = preg_replace('/-[0-9]+$/', null, $this->URLSegment) . '-' . $count;
$count++; $count++;
} }
// If there's no PresentationCategoryPage, add the current summit
if (!$this->PresentationCategoryPageID) {
$SummitPageID = 0;
$SummitRedirector = DataObject::get_by_id('RedirectorPage', 154);
If ($SummitRedirector) {
$SummitPageID = $SummitRedirector->LinkToID;
$VideoPage = DataObject::get_one('PresentationCategoryPage', '`ParentID` = ' . $SummitPageID);
}
if ($VideoPage) $this->PresentationCategoryPageID = $VideoPage->ID;
}
} }
//Test whether the URLSegment exists already on another Video //Test whether the URLSegment exists already on another Video
function LookForExistingURLSegment($URLSegment) function LookForExistingURLSegment($URLSegment)
{ {
return Company::get()->filter(array('URLSegment' => $URLSegment, 'ID:not' => $this->ID))->first(); return (DataObject::get_one('Company', "URLSegment = '" . $URLSegment . "' AND ID != " . $this->ID));
} }
// Pull video thumbnail from YouTube API // Pull video thumbnail from YouTube API
function ThumbnailURL() { function ThumbnailURL()
{
if ($this->YouTubeID) { if ($this->YouTubeID) {
/* $response = @file_get_contents("http://gdata.youtube.com/feeds/api/videos/".$this->YouTubeID."?v=2&alt=jsonc");
if ($response) {
$json = json_decode($response);
if (isset($json->data->thumbnail->sqDefault)) {
return $json->data->thumbnail->sqDefault;
}
} */
return "http://i.ytimg.com/vi/" . $this->YouTubeID . "/default.jpg"; return "http://i.ytimg.com/vi/" . $this->YouTubeID . "/default.jpg";
} }
} }
//Generate the link for this product //Generate the link for this product
function ShowLink() function ShowLink()
{ {
@ -148,8 +161,32 @@ class Presentation extends DataObject {
} }
} }
function SchedEventImport($ParentPageID) { function PopulateFromSchedEvent($SchedEventID)
$Events = SchedEvent::get(); {
$SchedEvent = DataObject::get_by_id('SchedEvent', $SchedEventID);
$this->Name = $SchedEvent->eventtitle;
$this->DisplayOnSite = TRUE;
$this->Description = $SchedEvent->description;
$this->StartTime = $SchedEvent->event_start;
$this->EndTime = $SchedEvent->event_end;
$this->Type = $SchedEvent->event_type;
$this->Speakers = $SchedEvent->speakers;
$this->event_key = $SchedEvent->event_key;
$this->write();
}
function AddYouTubeID($YouTubeID)
{
$this->YouTubeID = $YouTubeID;
$this->write();
}
function SchedEventImport($ParentPageID)
{
$Events = DataObject::get_one('SchedEvent', '');
foreach ($Events as $Event) { foreach ($Events as $Event) {
$Presentation = new Presentation(); $Presentation = new Presentation();
@ -162,30 +199,6 @@ class Presentation extends DataObject {
$Presentation->Type = $Event->event_type; $Presentation->Type = $Event->event_type;
$Presentation->Speakers = $Event->speakers; $Presentation->Speakers = $Event->speakers;
// Determine day
$day = 1;
switch ($Event->event_start) {
case '2013-11-05':
$day = 1;
break;
case '2013-11-06':
$day = 2;
break;
case '2013-11-07':
$day = 3;
break;
case '2013-11-08':
$day = 4;
break;
case '2013-11-09':
$day = 5;
break;
}
$Presentation->Day = $day;
// Assign parent page // Assign parent page
$Presentation->PresentationCategoryPageID = $ParentPageID; $Presentation->PresentationCategoryPageID = $ParentPageID;
$Presentation->write(); $Presentation->write();
@ -199,44 +212,6 @@ class Presentation extends DataObject {
$Presentation->write(); $Presentation->write();
} }
}
function AddMedia($ParentPageID) {
$Presentations = Presentation::get()->filter('PresentationCategoryPageID', $ParentPageID);
foreach ($Presentations as $Presentation) {
if(!$Presentation->SlidesLink) {
$SchedEventMatch = SchedEvent::get()->filter('eventtitle',$Presentation->Name)->first();
if($SchedEventMatch && $SchedEventMatch->UploadedMedia()) {
$Presentation->SlidesLink = $SchedEventMatch->UploadedMedia()->link();
$Presentation->write();
echo 'Added slides to "' . $Presentation->Name . '" <br/>';
} elseif ($SchedEventMatch && $SchedEventMatch->HostedMediaURL()) {
$Presentation->SlidesLink = $SchedEventMatch->HostedMediaURL();
$Presentation->write();
echo 'Added slides to "' . $Presentation->Name . '" <br/>';
}
}
}
}
function AdjustDates() {
$Events = SchedEvent::get();
foreach ($Events as $Event) {
$Presentation = Presentation::get()->filter('Name', $Event->eventtitle)->first();
if($Presentation) {
$Presentation->StartTime = $Event->event_start;
$Presentation->EndTime = $Event->event_end;
$Presentation->write();
} }
} }
}
}

View File

@ -54,18 +54,7 @@ class PresentationCategoryPage_Controller extends Page_Controller {
); );
public function Presentations(){ public function Presentations(){
if(isset($_GET['day'])){ $sessions = dataobject::get('Presentation','`YouTubeID` IS NOT NULL AND PresentationCategoryPageID = '.$this->ID,'StartTime DESC');
$sessions = "";
$day = Convert::raw2xml($_GET['day']);
$day = (int)$day;
if (is_numeric($day)) {
$sessions = Presentation::get()->filter(array( 'PresentationCategoryPageID' => $this->ID , 'Day' => $day))->sort('StartTime','ASC');
} else {
$sessions = Presentation::get()->filter(array( 'PresentationCategoryPageID' => $this->ID , 'Day' => 1))->sort('StartTime','ASC');
}
} else {
$sessions = Presentation::get()->filter(array( 'PresentationCategoryPageID' => $this->ID , 'Day' => 1))->sort('StartTime','ASC');
}
return $sessions; return $sessions;
} }
@ -78,6 +67,7 @@ class PresentationCategoryPage_Controller extends Page_Controller {
Session::set('Day', 1); Session::set('Day', 1);
} }
if (Director::urlParam("OtherID") != "presentation") Session::set('Autoplay',TRUE);
} }
//Show the Presentation detail page using the PresentationCategoryPage_presentation.ss template //Show the Presentation detail page using the PresentationCategoryPage_presentation.ss template
@ -90,6 +80,10 @@ class PresentationCategoryPage_Controller extends Page_Controller {
); );
$this->Title = $Presentation->Name; $this->Title = $Presentation->Name;
$this->Autoplay = Session::get('Autoplay');
// Clear autoplay so it only happens when you come directly from videos index
Session::set('Autoplay',FALSE);
//return our $Data to use on the page //return our $Data to use on the page
return $this->Customise($Data); return $this->Customise($Data);
@ -101,6 +95,15 @@ class PresentationCategoryPage_Controller extends Page_Controller {
} }
} }
function PresentationDayID($PresentationDay) {
return trim($PresentationDay,' ');
}
function LatestPresentation()
{
return $this->Presentations()->first();
}
// Check to see if the page is being accessed in Chinese // Check to see if the page is being accessed in Chinese
// We use this in the templates to tell Chinese visitors how to obtain the videos on a non-youtube source // We use this in the templates to tell Chinese visitors how to obtain the videos on a non-youtube source
@ -119,7 +122,7 @@ class PresentationCategoryPage_Controller extends Page_Controller {
{ {
$Params = $this->getURLParams(); $Params = $this->getURLParams();
$Segment = convert::raw2sql($Params['ID']); $Segment = convert::raw2sql($Params['ID']);
if($Params['ID'] && $Presentation = Presentation::get()->filter(array('URLSegment' => $Segment, 'PresentationCategoryPageID' => $this->ID))->first()) if($Params['ID'] && $Presentation = DataObject::get_one('Presentation', "`URLSegment` = '".$Segment."' AND `PresentationCategoryPageID` = ".$this->ID))
{ {
return $Presentation; return $Presentation;
} }
@ -143,5 +146,4 @@ class PresentationCategoryPage_Controller extends Page_Controller {
echo "Presentation URLS updated."; echo "Presentation URLS updated.";
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* Copyright 2014 Openstack Foundation * Copyright 2014 Openstack Foundation
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
@ -44,7 +45,8 @@ class SchedToolsPage_Controller extends Page_Controller
'Success', 'Success',
'LinkTo', 'LinkTo',
'LinkToForm', 'LinkToForm',
'EmailSpeakers' => 'ADMIN' 'EmailSpeakers' => 'ADMIN',
'AssignYouTubeID'
); );
function init() function init()
@ -81,6 +83,43 @@ class SchedToolsPage_Controller extends Page_Controller
"); ");
}
function AssignYouTubeID()
{
if (isset($_GET['token']) &&
$_GET['token'] == "fcv4x7Nl8v" &&
isset($_GET['youtubeid']) &&
isset($_GET['schedid'])
) {
$CleanedYoutubeID = Convert::raw2sql($_GET['youtubeid']);
$CleanedSchedID = Convert::raw2sql($_GET['schedid']);
$Presentation = DataObject::get_one('Presentation', "`event_key` = '" . $CleanedSchedID . "'");
If ($Presentation) {
// Add the YouTubeID to an existing presentation
$Presentation->YouTubeID = $CleanedYoutubeID;
$Presentation->write();
} else {
// Create a new presentation with this sched event and add the youtube id
$SchedEvent = DataObject::get_one('SchedEvent', "`event_key` = '" . $CleanedSchedID . "'");
if ($SchedEvent) {
$Presentation = new Presentation();
$Presentation->PopulateFromSchedEvent($SchedEvent->ID);
$Presentation->YouTubeID = $CleanedYoutubeID;
$Presentation->sched_key = $SchedEvent->sched_key;
$Presentation->write();
}
}
}
} }

View File

@ -0,0 +1,403 @@
/*Videos Home Page*/
.main-video-wrapper {
width: 100%;
background: #222;
height: auto;
margin: 0 0 30px;
text-align: center;
box-sizing: border-box; }
a.main-video {
position: relative;
display: block;
max-width: 617px;
margin: 0 auto;
border-left: 1px solid #eee;
border-right: 1px solid #eee; }
a.main-video .video-description-wrapper {
position: absolute;
display: block;
background: rgba(0, 0, 0, 0.7);
bottom: 0;
left: 0;
right: 0;
top: 230px;
text-align: left;
z-index: 1000;
padding: 20px; }
@media (max-width: 767px) {
a.main-video .video-description-wrapper {
top: 60%; } }
@media (max-width: 480px) {
a.main-video .video-description-wrapper {
top: 50%; } }
a.main-video .video-description-wrapper .video-description {
width: 80%;
float: left; }
a.main-video .video-description-wrapper .video-description h3 {
color: white;
font-size: 22px;
font-weight: 600;
width: 100%;
height: 25px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis; }
a.main-video .video-description-wrapper .video-description p {
color: white;
font-size: 13px;
line-height: 1.2;
font-weight: 400;
padding: 0;
display: block;
width: 100%;
height: 15px;
margin: 0 auto;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis; }
a.main-video:hover .video-description-wrapper {
top: 0; }
a.main-video:hover .video-description-wrapper .video-description h3 {
height: 10%;
white-space: normal; }
a.main-video:hover .video-description-wrapper .video-description p {
height: 90%;
white-space: normal; }
@media (max-width: 480px) {
a.main-video:hover .video-description-wrapper {
top: 50%; }
a.main-video:hover .video-description-wrapper .video-description h3 {
height: 25px;
white-space: nowrap; }
a.main-video:hover .video-description-wrapper .video-description p {
height: 15px;
white-space: nowrap; } }
.main-video img {
margin: 0 auto;
width: 100%;
max-width: 615px;
max-height: 100%;
display: block;
position: relative;
z-index: 1; }
.play-btn {
float: right;
color: white;
font-size: 40px;
width: 20%;
margin-top: 5px;
text-align: center; }
.play-btn img#play {
max-width: 70px;
max-height: 70px; }
.featured-row {
width: 100%;
background: #2A4E68;
padding: 0;
position: relative;
display: block;
margin-bottom: 50px; }
.featured-row h2 {
color: white;
font-weight: 400;
font-size: 24px; }
.featured-row h2 span {
font-weight: 400;
font-size: 12px;
color: #edf2f7;
margin-left: 20px; }
.featured-row:after {
top: 100%;
left: 10%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
border-color: rgba(42, 78, 104, 0);
border-top-color: #2A4E68;
border-width: 15px;
margin-left: -15px; }
.daily-recap-wrapper .video-thumb-title {
text-align: center; }
.video-thumb {
/*background: $lightblue;*/
text-align: center;
width: 100%;
height: 0;
position: relative;
display: table;
overflow: hidden;
margin-bottom: 20px;
box-sizing: border-box; }
.thumb-play {
display: none;
background-image: url("//www.openstack.org/themes/openstack/images/landing-pages/auto/play-button.png");
background-repeat: no-repeat;
background-position: center center;
background-color: rgba(0, 0, 0, 0.3);
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0; }
.video-thumb:hover .thumb-play {
display: block; }
@media (max-width: 767px) {
.video-thumb .thumb-play {
display: block;
background-color: transparent; } }
.video-thumb img.video-thumb-img {
max-width: 100%;
width: 100%; }
.video-thumb p {
color: #C6CDD6;
font-size: 14px;
font-weight: 700;
display: table-cell;
vertical-align: middle; }
.sort-row {
background: #edf2f7;
width: 100%;
min-height: 50px;
padding: 25px 0;
position: relative;
display: block;
margin: 50px 0;
color: #2A4E68; }
.sort-left {
float: left; }
.sort-left i {
color: #b4c5d6;
line-height: 1;
margin-right: 10px; }
.sort-left i:hover {
color: #2A4E68;
cursor: pointer; }
.sort-left i.active {
color: #2A4E68; }
.sort-right {
float: right;
font-size: 12px;
text-transform: uppercase;
font-weight: 600; }
.sort-right i {
margin-left: 10px;
font-weight: 700;
font-size: 14px; }
.video-thumb-title {
margin: -10px 0 0;
color: #30739C;
font-size: 12px;
font-weight: 400;
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis; }
.video-thumb-speaker {
color: #30739C;
font-size: 12px;
font-weight: 600;
margin-bottom: 40px;
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis; }
@media (max-width: 767px) {
.daily-recap-wrapper .video-thumb-title {
margin-bottom: 40px; }
.video-thumb-title, .video-thumb-speaker {
text-align: center; } }
.video-dropdown > .dropdown-menu {
margin: 20px -20px 0;
padding: 10px 0;
min-width: 230px;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
left: -99%;
right: 100%;
background-color: #edf2f7;
background-clip: padding-box;
border: 1px solid rgba(0, 0, 0, 0);
box-shadow: none; }
/*.video-dropdown>.dropdown-menu:after, .video-dropdown>.dropdown-menu:before {
bottom: 100%;
right: 25%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
}
.video-dropdown>.dropdown-menu:after {
border-color: rgba(255, 255, 255, 0);
border-bottom-color: #fff;
border-width: 15px;
margin-left: -15px;
}
.video-dropdown>.dropdown-menu:before {
border-color: rgba(170, 170, 170, 0);
border-bottom-color: #aaaaaa;
border-width: 15px;
margin-left: -16px;
}*/
.video-dropdown > .dropdown-menu li a {
text-transform: uppercase;
padding: 13px 20px;
font-size: 12px;
color: #2A4E68; }
.video-dropdown > .dropdown-menu li a:hover {
color: white;
background: #2A4E68; }
.video-dropdown > .dropdown-menu li a:focus {
outline: none; }
/*End Videos Home Page*/
/*Video Inner Page*/
.single-video-details {
margin: 60px auto; }
.single-video-details h3 {
text-align: left; }
.single-video-details strong {
color: #2A4E68; }
.video-share {
text-align: right;
float: right; }
.video-share a i {
font-size: 22px;
margin-left: 20px;
vertical-align: middle;
color: #759bb7; }
.video-share a i:hover {
color: #2A4E68; }
@media (max-width: 767px) {
.video-share {
float: none;
text-align: center;
margin: -20px 0 20px;
padding-top: 20px;
padding-bottom: 20px;
border-top: 1px solid #eee;
border-bottom: 1px solid #eee; }
.video-share a i {
margin: 0 10px; } }
.video-share a i.fa-twitter {
font-size: 24px;
margin-bottom: -1px; }
p.single-video-description {
margin: 10px 0 40px; }
.video-categories a {
margin-left: 10px;
text-decoration: underline; }
.video-tags {
margin-top: 15px; }
.video-tags a {
background: #edf2f7;
font-size: 10px;
font-weight: 600;
border-radius: 3px;
margin-left: 10px;
padding: 5px 10px; }
.video-speakers {
margin-top: 15px;
display: block; }
.video-speakers p a {
margin-left: 0;
text-decoration: underline; }
.video-speakers .twitter-follow-button {
margin-left: 10px; }
.video-media-title {
margin: 0 0 10px;
display: block; }
@media (max-width: 767px) {
.video-media-wrapper {
margin-top: 30px; } }
.media-btn-wrapper {
float: left;
margin-top: 10px; }
a.media-btn {
background: #2A4E68;
color: white;
padding: 10px 20px;
border-radius: 4px;
border: 0; }
a.media-btn:hover {
text-decoration: none;
background: #16283A; }
a.media-btn i {
margin-right: 10px; }
a.media-btn.right {
border-top-left-radius: 0px;
border-bottom-left-radius: 0px;
margin-left: -2px;
border-left: 1px solid #3E71A4; }
a.media-btn.left {
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
margin-right: -2px;
border-right: 1px solid #122231; }
/*End Video Inner Page*/

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -0,0 +1,57 @@
<div class="sort-row">
<div class="container">
<div class="sort-left">
<i class="fa fa-th active"></i>
<i class="fa fa-th-list"></i>
</div>
<div class="sort-right">
<div class="dropdown video-dropdown">
<a data-toggle="dropdown" href="#">Select A Day <i class="fa fa-caret-down"></i></a>
<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
<% control Presentations.GroupedBy(PresentationDay) %>
<li role="presentation"><a role="menuitem" tabindex="-1" href="{$Top.Link}#day-{$Pos}">$PresentationDay</a></li>
<% end_control %>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<!-- Start Videos -->
<div class="row">
<div class="col-lg-12">
<% control Presentations.GroupedBy(PresentationDay) %>
<div class="row">
<h2 id="day-{$Pos}">$PresentationDay</h2>
<ul>
<% control Children %>
<!-- Video Block -->
<div class="col-lg-3 col-md-3 col-sm-3">
<a href="{$Top.Link}presentation/{$URLSegment}">
<div class="video-thumb">
<div class="thumb-play"></div>
<img class="video-thumb-img" src="//img.youtube.com/vi/{$YouTubeID}/0.jpg">
</div>
<p class="video-thumb-title">
$Name
</p>
<p class="video-thumb-speaker">
$Speakers
</p>
</a>
</div>
<% end_control %>
</ul>
</div>
<% end_control %>
</div>
</div>
<!-- End Videos -->
</div>
<!-- End Page Content -->

View File

@ -1,86 +1,74 @@
<% require themedCSS(conference) %> <% require themedCSS(videos) %>
<% loop Parent %> <div class="container">
$HeaderArea <div class="row">
<% end_loop %> <div class="col-lg-12 col-md-12 col-sm-12">
<div class="eventTitleArea">
<div class="span-5"> <h1>Paris Summit 2014: Videos</h1>
<p><strong>The OpenStack Summit</strong><br />$Parent.MenuTitle.XML</p>
<ul class="navigation">
<% loop Parent %>
<li><a href="$Link" title="Go to the $Title.XML page" class="$LinkingMode"><span>Overview</span></a></li>
<% end_loop %>
<% loop Menu(3) %>
<li><a href="$Link" title="Go to the $Title.XML page" class="$LinkingMode"><span>$MenuTitle.XML</span></a></li>
<% end_loop %>
</ul>
<% loop Parent %>
<% include HeadlineSponsors %>
<% end_loop %>
</div> </div>
<!-- Content Area -->
<div class="prepend-1 span-11" id="news-feed">
<% if StillUploading %>
<div class="span-18 last siteMessage" id="SuccessMessage">
<p>Note: Presentations are still being uploaded. If you do not see the presentation you are looking for, please check back soon.</p>
</div> </div>
</div>
<% end_if %> </div>
<% loop LatestPresentation %>
<div class="span-18 last"> <div class="main-video-wrapper">
<a href="{$Top.Link}presentation/{$URLSegment}" class="main-video">
<ul class="day-picker"> <div class="video-description-wrapper">
<li><a href="{$Link}?day=1" <% if currentDay=1 %>class="selected"<% end_if %> >Day 1</a></li> <div class="video-description">
<li><a href="{$Link}?day=2" <% if currentDay=2 %>class="selected"<% end_if %> >Day 2</a></li> <h3>$Name</h3>
<li><a href="{$Link}?day=3" <% if currentDay=3 %>class="selected"<% end_if %> >Day 3</a></li> <p>$FormattedStartTime GMT<p>
<li><a href="{$Link}?day=4" <% if currentDay=4 %>class="selected"<% end_if %> >Day 4</a></li> <p>$Description</p>
</ul> </div>
<div class="play-btn">
<img id="play" src="//www.openstack.org/themes/openstack/images/landing-pages/auto/play-button.png">
<h1>Videos of Sessions From Day $currentDay</h1> </div>
</div>
<hr/> <img src="//img.youtube.com/vi/{$YouTubeID}/maxresdefault.jpg">
</a>
</div>
<% if Presentations %> <% end_loop %>
<% loop Presentations %> <div class="featured-row">
<div class="container">
<% if DisplayOnSite %> <h2>
<% if YouTubeID %> Daily Recaps
<div class="presentation"> <span>Highlights from the OpenStack Summit in Paris</span>
</h2>
<div class="span-4"><a href="{$Top.Link}presentation/{$URLSegment}"><img src="$ThumbnailURL" /></a></div> </div>
<div class="span-14 last"> </div>
<h2><a href="{$Top.Link}presentation/{$URLSegment}">$Title</a></h2> <div class="container daily-recap-wrapper">
<% if Speakers %><p><strong>$Speakers</strong></p><% end_if %> <div class="row">
$RAW_val(Description) <div class="col-lg-3 col-md-3 col-sm-3">
<p> <div class="video-thumb">
<a href="{$Top.Link}presentation/{$URLSegment}" class="roundedButton">Watch Now</a> <img class="video-thumb-img" src="/themes/openstack/images/no-video.jpg">
<% if SlidesLink %> </div>
&nbsp;<a href="$SlidesLink" class="roundedButton">Slides</a> <p class="video-thumb-title">
<% end_if %> Day 1 - Coming Soon
</p> </p>
</div> </div>
<hr/> <div class="col-lg-3 col-md-3 col-sm-3">
<div class="video-thumb">
<img class="video-thumb-img" src="/themes/openstack/images/no-video.jpg">
</div>
<p class="video-thumb-title">
Day 2 - Coming Soon
</p>
</div>
<div class="col-lg-3 col-md-3 col-sm-3">
<div class="video-thumb">
<img class="video-thumb-img" src="/themes/openstack/images/no-video.jpg">
</div>
<p class="video-thumb-title">
Day 3 - Coming Soon
</p>
</div>
<div class="col-lg-3 col-md-3 col-sm-3">
<div class="video-thumb">
<img class="video-thumb-img" src="/themes/openstack/images/no-video.jpg">
</div>
<p class="video-thumb-title">
Day 4 - Coming Soon
</p>
</div>
</div>
</div> </div>
<% end_if %> <% include VideoThumbnails %>
<% end_if %>
<% end_loop %>
<% else %>
<p>Sorry, no presentations are available for the day you've selected. Please check back soon.</p>
<% end_if %>
</div>
<ul class="day-picker">
<li><a href="{$Link}?day=1" <% if currentDay=1 %>class="selected"<% end_if %> >Day 1</a></li>
<li><a href="{$Link}?day=2" <% if currentDay=2 %>class="selected"<% end_if %> >Day 2</a></li>
<li><a href="{$Link}?day=3" <% if currentDay=3 %>class="selected"<% end_if %> >Day 3</a></li>
<li><a href="{$Link}?day=4" <% if currentDay=4 %>class="selected"<% end_if %> >Day 4</a></li>
</ul>
</div>

View File

@ -1,69 +1,53 @@
<% require themedCSS(presentation) %> <% require themedCSS(videos) %>
<h3>OpenStack Summit Presentations</h3>
<hr/>
<p></p>
<div>
<div class="span-18">
<h1>"$Presentation.Name"</h1>
<h4 class="speakers">By: $Presentation.Speakers</h4>
<% if Presentation.Description %>
$Presentation.Description
<% end_if %>
<hr/>
<a name="video"></a>
<h3>Watch Presentation</h3>
<iframe width="700" height="436" src="//www.youtube.com/embed/{$Presentation.YouTubeID}" frameborder="0" allowfullscreen></iframe>
<% loop Presentation %> <% loop Presentation %>
<div class="main-video-wrapper">
<iframe width="853" height="480" src="//www.youtube.com/embed/{$YouTubeID}?rel=0<% if Top.Autoplay %>&autoplay=1<% end_if %>" frameborder="0" allowfullscreen></iframe>
</div>
<div class="container single-video-details">
<div class="row">
<div class="col-lg-3 col-md-3 col-sm-3 video-share">
<a href="https://twitter.com/share" data-related="jasoncosta" data-lang="en" data-size="large" data-count="none"><i class="fa fa-twitter"></i></a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
</div>
<div class="col-lg-9 col-md-9 col-sm-9">
<h3>$Name</h3>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<p class="single-video-description">
$Description
</p>
<div class="row">
<div class="col-lg-7 col-md-5 col-sm-7">
<div class="video-speakers">
<strong>Speakers:</strong> $Speakers
</div>
</div>
<div class="col-lg-5 col-md-5 col-sm-5">
<!-- Slides -->
<% if SlidesLink %> <% if SlidesLink %>
<p></p> <div class="video-media-wrapper">
<hr/> <p>
<strong>Related Media:</strong>
<a name="slides"></a> </p>
<p class="video-media-title">
<% if EmbedSlides %> superuser-slides.zip
<h3>View Slides</h3> </p>
<iframe src="{$SlidesLink}?embedded=true" width="700" height="480" style="border:1px solid #ddd;"></iframe> <div class="media-btn-wrapper">
<% else %> <a href="{$SlidesLink}" class="media-btn"><i class="fa fa-cloud-download"></i> Download</a>
<h3>Download The Presentation Slides</h3> </div>
<p><a href="$SlidesLink" class="roundedButton">Download Slides</a></p> </div>
<% end_if %>
<% end_if %> <% end_if %>
</div>
</div>
</div>
</div>
</div>
<% end_loop %> <% end_loop %>
</div> <% include VideoThumbnails %>
<div class="prepend-1 span-5 last">
<div class="share-box">
<p><strong>Media:</strong><br/>
<a href="{$Top.Link}presentation/{$Presentation.URLSegment}/#video" class="roundedButton">Video</a> &nbsp;
<% if Presentation.SlidesLink %>
<a href="{$Top.Link}presentation/{$Presentation.URLSegment}/#slides" class="roundedButton">Slides</a>
<% end_if %>
</p>
<hr/>
<p><strong>Share This Presentation:</strong><br/>
<a href="https://twitter.com/share" class="twitter-share-button" data-related="jasoncosta" data-lang="en" data-size="large" data-count="none">Tweet</a></p>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<hr/>
<p><strong>Discover More Content:</strong><br/>
<a href="{$Top.Link}?day=$Presentation.Day" class="roundedButton">More Presentations</a></p>
</div>
</div>
</div>