1 fullpage=true 2 page.title=Google I/O 13 3 @jd:body 4 5 <style> 6 #ioplayer-frame { 7 z-index:10; 8 width:703px; 9 height:396px; 10 margin:0; 11 position:relative; 12 } 13 14 #noplayer-message { 15 position:absolute; 16 top:50%;left:0; 17 width:100%; 18 z-index:-1; 19 text-align:center; 20 display:none; 21 } 22 23 h1 { 24 font-weight:100; 25 font-size:40px; 26 line-height:30px; 27 margin:30px 0 10px 0px; 28 color:#000; 29 } 30 31 h2 { 32 font-weight:100; 33 font-size:30px; 34 line-height:30px; 35 margin:12px 0 10px 0px; 36 color:#000; 37 float:left; 38 display:block; 39 } 40 41 .col-4 h2 { 42 margin-top:40px; 43 } 44 45 ul.videos { 46 list-style:none; 47 margin:0; 48 width:auto; 49 } 50 ul.videos li { 51 display:block; 52 float:left; 53 position:relative; 54 margin:0 2px 2px 0; 55 background-repeat:no-repeat !important; 56 background-size:320px auto; 57 background-position:10% 50%; 58 z-index:1; /* IE: the description is 2 */ 59 } 60 ul.videos li a { 61 color:#fff !important; 62 display:block; 63 margin:0; 64 padding:8px 12px; 65 width:209px; 66 height:134px; 67 box-shadow:inset 500px 500px 999px rgba(000, 000, 000, 0.2); 68 background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, rgba(0,0,0,0.8)), color-stop(1, transparent)); 69 background-image: -webkit-linear-gradient(top, rgba(0,0,0,0.8), transparent); 70 background-image: -moz-linear-gradient(top, rgba(0,0,0,0.8), transparent); 71 background-image: -o-linear-gradient(top, rgba(0,0,0,0.8), transparent); 72 background-image: linear-gradient(to bottom, rgba(0,0,0,0.8), transparent); 73 filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#cc000000', endColorstr='#00ffffff',GradientType=0 ); /* IE6-9 */ 74 } 75 ul.videos.featured li { 76 margin:0 0 2px; 77 } 78 ul.videos.featured li a { 79 margin:0; 80 height:115px; 81 } 82 ul.videos li a:hover { 83 box-shadow:inset 500px 500px 999px rgba(255,255,255, 0.6); 84 } 85 ul.videos li h4 { 86 text-shadow:1px 1px 0 rgba(0,0,0,0.8); 87 font-size:18px; 88 line-height:22px; 89 color:#fff; 90 margin:0; 91 height:100%; /* IE: to fill clickable area */ 92 } 93 94 ul.videos li .description-frame { 95 display:none; 96 z-index:2; /* IE: the li is 1 */ 97 } 98 ul.videos li a:hover .description-frame { 99 display:block; 100 position:absolute; 101 top:80px; 102 left:8px; 103 z-index:99; 104 } 105 ul.videos .description { 106 background:#fff; 107 width:200px; 108 padding:8px; 109 -webkit-border-radius:1px; 110 -moz-border-radius:1px; 111 border-radius:1px; 112 -moz-box-shadow: 0 2px 3px 2px rgba(000,000,000, 0.4); 113 -webkit-box-shadow: 0 2px 3px 2px rgba(000,000,000, 0.4); 114 box-shadow: 0 2px 3px 2px rgba(000,000,000, 0.4); 115 font-size:11px; 116 line-height:12px; 117 color:#000; 118 overflow:hidden; 119 } 120 ul.videos .arrow-up { 121 position:absolute; 122 left:15px; 123 top:-11px; 124 width:0; 125 height:0; 126 border-bottom:12px solid #fff; 127 border-left:12px solid transparent; 128 border-right:12px solid transparent; 129 } 130 ul.videos .arrow-down { 131 position:absolute; 132 left:15px; 133 bottom:-11px; 134 width:0; 135 height:0; 136 border-top:12px solid #fff; 137 border-left:12px solid transparent; 138 border-right:12px solid transparent; 139 } 140 141 ul.videos span.tag { 142 font-size:.9em; 143 font-weight:normal; 144 display: block; 145 position: absolute; 146 bottom: 0; 147 color: #fff; 148 left: 0; 149 padding: 4px; 150 border-top-right-radius:4px; 151 text-transform:uppercase; 152 text-shadow: none; 153 } 154 ul.videos span.tag.design { 155 background-color:rgba(51, 181, 229, .7); 156 filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#cc33b5e5', endColorstr='#cc33b5e5',GradientType=0 ); /* IE6-9 */ 157 } 158 ul.videos span.tag.develop { 159 background-color:rgba(255, 136, 0, .7); 160 filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ccff8800', endColorstr='#ccff8800',GradientType=0 ); /* IE6-9 */ 161 } 162 ul.videos span.tag.distribute { 163 background-color:rgba(153, 204, 0, .7); 164 filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#cc99cc00', endColorstr='#cc99cc00',GradientType=0 ); /* IE6-9 */ 165 } 166 167 </style> 168 169 170 171 172 173 174 175 <div class="wrap"> 176 177 <div class="col-12" style="width:704px;margin:0"> 178 <h1>Android @ Google I/O 13</h1> 179 <div id="ioplayer-frame"> 180 <div id="noplayer-message"> 181 <!-- busted flash player message --> 182 Your video is supposed to appear here.<br/> 183 Make sure you have the <a href="//get.adobe.com/flashplayer/" target="_blank">Flash® Player</a>. 184 </div> 185 <div id="player"><!-- Youtube embeds here... actually replaces this div --></div> 186 </div> 187 </div> 188 189 <div class="col-4" style="margin:0;width:234px;padding:0 0 0 2px"> 190 <h2 class="norule">Most Popular</h2> 191 <ul class="videos featured" id="playlist2"> 192 </ul> 193 </div> 194 </div> 195 196 <div class="wrap"> 197 198 <div style="position:absolute;width:940px;text-align:right"> 199 <a href="//www.youtube.com/AndroidDevelopers" target="_blank"> 200 More on YouTube 201 <img src="//www.youtube.com/favicon.ico" style="border:0;width:16px;height:16px;vertical-align:middle;margin:0 2px 3px 2px"> 202 </a> 203 </div> 204 <div style="width:944px;overflow:hidden;padding:0 0 20px"> 205 <h2 class="norule">All Videos</h2> 206 <ul class="videos" id="playlist1" style="clear:left"> 207 <span id="videos-design"></span> 208 <span id="videos-develop"></span> 209 <span id="videos-distribute"></span> 210 </ul> 211 </div> 212 213 </div> 214 215 <br class="clearfix"/> 216 217 218 219 220 221 222 223 224 225 226 227 <script src="//swfobject.googlecode.com/svn/trunk/swfobject/swfobject.js" type="text/javascript"></script> 228 <script type="text/javascript"> 229 230 /* Load a video into the player box. 231 * @param id The YouTube video ID 232 * @param title The video title to display in the player box (character escaped) 233 * @param autoplay Whether to automatically play the video 234 */ 235 function loadVideo(id, title, autoplay) { 236 var url = '//www.youtube.com/v/' + id + '&rel=1&border=0&fs=1' + (autoplay?'&autoplay=1':''); 237 swfobject.embedSWF(url, 'player', '704', '397', '9.0.0', false, false, {allowfullscreen: 'true'}); 238 $('body,html').animate({ scrollTop: 0 }, "slow"); 239 setTimeout(function(){$('#noplayer-message').show()}, 2000); 240 } 241 242 243 function buildPlaylistDesign(data) { 244 buildPlaylist(data, $('ul#playlist1 #videos-design'), "design"); 245 } 246 247 function buildPlaylistDevelop(data) { 248 buildPlaylist(data, $('ul#playlist1 #videos-develop'), "develop"); 249 } 250 251 function buildPlaylistDistribute(data) { 252 buildPlaylist(data, $('ul#playlist1 #videos-distribute'), "distribute"); 253 } 254 255 function buildPlaylist2(data) { 256 buildPlaylist(data, $('ul#playlist2')); 257 } 258 259 function buildPlaylist(data, ul, tag) { 260 261 var MAX_DESC_LENGTH = 200; // the length at which we will trim the description 262 var feed = data.feed; 263 var entries = feed.entry || []; 264 var playlistId = feed.yt$playlistId.$t; 265 266 // Loop through each entry (each video) and add it to the '#DevelopersLive' list 267 for (var i = 0; i < entries.length; i++) { 268 var entry = entries[i]; 269 var title = entry.title.$t; 270 var id = entry.media$group.yt$videoid.$t; 271 // get 180x320 thumbnail 272 var thumbs = entry.media$group.media$thumbnail; 273 var thumbUrl; 274 for (var j = 0; j < thumbs.length; j++) { 275 if (thumbs[j].yt$name == "hqdefault") { 276 thumbUrl = thumbs[j].url; 277 } 278 } 279 280 // chop out the google io title 281 title = title.substr(title.indexOf("-") + 1, title.length); 282 283 var fullDescription = entry.media$group.media$description.$t; 284 var playerUrl = entry.media$group.media$content[0].url; 285 var shortDescription = fullDescription.substr(0, MAX_DESC_LENGTH); 286 // further shorten description if there's a url (remove it) 287 var httpindex = shortDescription.indexOf("http://"); 288 if (httpindex != -1) { 289 shortDescription = shortDescription.substring(0,httpindex); 290 } 291 shortDescription += shortDescription.length == MAX_DESC_LENGTH ? "..." : ""; // add ellipsis if we've chopped the description 292 293 var a = $('<a href="#" id="' + id + '" ' 294 + 'onclick="loadVideo(\'' + id + '\',\'' + escape(title) + '\',true); return false;" />'); 295 var pShortDescription = $('<div class="description-frame"><div class="arrow-up"></div>' 296 + '<div class="description">' + shortDescription + '</div></div>'); 297 var h4Title = "<h4>" + title + "</h4>"; 298 var li = $('<li style="background-image:url(\'' + thumbUrl +'\')" />'); 299 300 li.append(a); 301 a.append(h4Title).append(pShortDescription); 302 303 if (tag !== undefined) { 304 var $tag = $('<span class="tag ' + tag + '">' + tag + '</span>'); 305 a.append($tag); 306 } 307 308 ul.append(li); 309 310 311 // put the first video in the player 312 if ((tag == "design") && (i == 0)) { 313 loadVideo(id, escape(title), false); 314 } 315 } 316 } 317 318 319 /* Request the playlist feeds from YouTube */ 320 function showDevelopersLivePlaylist() { 321 var playlistId = "PLWz5rJ2EKKc-qVhMuAprIFYFbCotdgJKq"; /* IO 13 - Design */ 322 $.getScript("//gdata.youtube.com/feeds/api/playlists/" 323 + playlistId + 324 "?v=2&alt=json-in-script&max-results=50&callback=buildPlaylistDesign&orderby=position"); 325 326 playlistId = "PLWz5rJ2EKKc9rkwO9yBosRvkQBJd5utmR"; /* IO 13 - Develop */ 327 $.getScript("//gdata.youtube.com/feeds/api/playlists/" 328 + playlistId + 329 "?v=2&alt=json-in-script&max-results=50&callback=buildPlaylistDevelop&orderby=position"); 330 331 playlistId = "PLWz5rJ2EKKc-1WjgQqL0B4OQtbLfhMlB2"; /* IO 13 - Distribute */ 332 $.getScript("//gdata.youtube.com/feeds/api/playlists/" 333 + playlistId + 334 "?v=2&alt=json-in-script&max-results=50&callback=buildPlaylistDistribute&orderby=position"); 335 336 337 playlistId = "PLWz5rJ2EKKc9WGUwq2gQ-coU3fSyexgOx"; /* IO 13 - The Android Sessions */ 338 $.getScript("//gdata.youtube.com/feeds/api/playlists/" 339 + playlistId + 340 "?v=2&alt=json-in-script&max-results=3&callback=buildPlaylist2&orderby=viewCount"); 341 } 342 343 showDevelopersLivePlaylist(); 344 345 346 </script>