Here’s a neat way to present multiple YouTube videos in a responsive “gallery” in OU Campus. This example uses a mix of Bootstrap CSS and CSS specific to the gallery. Thanks to Wooster Web Design for the HTML/CSS/JS.
With the YouTube Gallery snippet and XSL transform, you can create a video gallery of multiple YouTube videos, selectable by clicking thumbnail images.
Here’s the table transform snippet (add HTML to /_resources/ou/snippets, then create new item in Content > Snippets).
<table class="ou-youtube-gallery transform" style="width: 100%;"> <caption>YouTube Gallery Table</caption> <thead> <tr> <th width="30%">Title</th> <th>YouTube ID (code after "watch?v=" e.g. G4RT-prDbIw in youtube.com/watch?v=G4RT-prDbIw or youtu.be/G4RT-prDbIw)</th> </tr> </thead> <tbody> <tr> <td> My YouTube Video </td> <td> G4RT-prDbIw </td> </tr> <tr> <td> Another YouTube Video </td> <td> o5ZymO9UgjM </td> </tr> </tbody> </table> <br />
Here’s the XSL template match; this belongs in an XSL file such as common.xsl or interior.xsl.
<!-- transform YouTube Gallery -->
<xsl:template match="table[contains(@class, 'ou-youtube-gallery')]">
<xsl:variable name="id" select="position()" />
<style type="text/css">
@import url(//www.yourdomain.edu/_resources/css/youtube-gallery.css);
</style>
<script type="text/javascript" src="/_resources/js/youtube-gallery.js" />
<div class="well">
<!-- THE YOUTUBE PLAYER -->
<div class="vid-container">
<iframe id="vid_frame{$id}" frameborder="0" width="560" height="315">
<xsl:attribute name="src">https://www.youtube.com/embed/<xsl:value-of select="./tbody/tr[1]/td[2]//text()"/>?rel=0&showinfo=0&autohide=1</xsl:attribute>
</iframe>
</div>
<!-- THE PLAYLIST -->
<div class="vid-list-container">
<div class="vid-list">
<xsl:for-each select="./tbody/tr">
<div class="vid-item" onclick="document.getElementById('vid_frame{$id}').src='https://youtube.com/embed/{td[2]//text()}?autoplay=1&rel=0&showinfo=0&autohide=1'">
<div class="thumb"><img alt="video thumbnail" src="https://img.youtube.com/vi/{td[2]//text()}/0.jpg" /></div>
<div class="desc"><xsl:value-of select="td[1]//text()" /></div>
</div>
</xsl:for-each>
</div><!--/vid-list-->
</div><!--/vid-container-->
<!-- LEFT AND RIGHT ARROWS -->
<div class="arrows">
<div class="arrow-left"><i class="icon-chevron-left icon-large"><!--scroll left--></i></div>
<div class="arrow-right"><i class="icon-chevron-right icon-large"><!--scroll right--></i></div>
</div>
</div>
</xsl:template>
And here are the .js for scrolling and .css for styling
//www.woosterwebdesign.com/responsive-youtube-player-with-playlist/
$(document).ready(function () {
$(".arrow-right").bind("click", function (event) {
event.preventDefault();
$(".vid-list-container").stop().animate({
scrollLeft: "+=336"
}, 750);
});
$(".arrow-left").bind("click", function (event) {
event.preventDefault();
$(".vid-list-container").stop().animate({
scrollLeft: "-=336"
}, 750);
});
});
/* styles responsive YouTube Gallery with scrolling thumbnails */
/** /www.woosterwebdesign.com/responsive-youtube-player-with-playlist/ **/
/* VIDEO PLAYER CONTAINER
############################### */
.vid-container {
position: relative;
padding-bottom: 52%;
padding-top: 30px;
height: 0;
}
.vid-container iframe,
.vid-container object,
.vid-container embed {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
/* VIDEOS PLAYLIST
############################### */
.vid-list-container {
width: 92%;
overflow: hidden;
margin-top: 20px;
margin-left:4%;
padding-bottom: 20px;
}
.vid-list {
width: 3680px;
position: relative;
top:0;
left: 0;
}
.vid-item {
display: block;
width: 148px;
height: 148px;
float: left;
margin: 0;
padding: 10px;
}
.thumb {
/*position: relative;*/
overflow:hidden;
height: 84px;
}
.thumb img {
width: 100%;
position: relative;
top: -13px;
}
.vid-item .desc {
color: #21A1D2;
font-size: 15px;
margin-top:5px;
}
.vid-item:hover {
background: #eee;
cursor: pointer;
}
.arrows {
position:relative;
width: 100%;
}
.arrow-left {
color: #fff;
position: absolute;
background: #777;
padding: 15px;
left: -25px;
top: -130px;
z-index: 99;
cursor: pointer;
}
.arrow-right {
color: #fff;
position: absolute;
background: #777;
padding: 15px;
right: -25px;
top: -130px;
z-index:100;
cursor: pointer;
}
.arrow-left:hover {
background: #CC181E;
}
.arrow-right:hover {
background: #CC181E;
}
@media (max-width: 624px) {
body {
margin: 15px;
}
.caption {
margin-top: 40px;
}
.vid-list-container {
padding-bottom: 20px;
}
/* reposition left/right arrows */
.arrows {
position:relative;
margin: 0 auto;
width:96px;
}
.arrow-left {
left: 0;
top: -17px;
}
.arrow-right {
right: 0;
top: -17px;
}
}
…and, finally, some instructions for use:
Click the Insert Snippet button, then choose category Video/Embedded Media > YouTube Gallery
This will insert a table in which you enter Title and YouTube ID for each video. This creates a gallery as shown below. To insert additional videos, click the cursor on a table row, then click the Table button, and choose Row > Insert Row Before (or after), then enter the additional title and ID.
No comments yet.