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