GSteamBroadcasts = { Init: function( fnFilterFunction, tagid, genreid, categoryid, maxBroadcasts, bAutoPlayingFeaturedBroadcast ) { if ( tagid === undefined ) { tagid = 0; } if ( genreid === undefined ) { genreid = 0; } if( categoryid === undefined ) { categoryid = 0; } if ( maxBroadcasts === undefined ) { maxBroadcasts = 6; } if( bAutoPlayingFeaturedBroadcast === undefined ) { bAutoPlayingFeaturedBroadcast = false; } GSteamBroadcasts.m_fnFilterItemToDisplayFunction = fnFilterFunction; GSteamBroadcasts.m_tagid = tagid; GSteamBroadcasts.m_genreid = genreid; GSteamBroadcasts.m_categoryid = categoryid; GSteamBroadcasts.m_nMaxBroadcasts = maxBroadcasts; GSteamBroadcasts.m_bAutoPlayingFeaturedBroadcast = bAutoPlayingFeaturedBroadcast; // If we have zero maxBroadcast, it means we should be disable if( GSteamBroadcasts.m_nMaxBroadcasts > 0 ) { GSteamBroadcasts.Render(); } }, CreateBroadcastCapsule: function( oItem, bAddTitleBar ) { var params = { 'class': 'store_capsule broadcast_capsule responsive_scroll_snap_start', 'href': oItem.app_link }; var rgItemData = GStoreItemData.GetCapParams( 'live_broadcast', oItem.appid, 0, null, params ); var $CapCtn = $J('', params ); var $ImgCtn = $J('
'); var rgImageProperties = { src: oItem.thumbnail_http_address }; var rgDefaultImageProperties = { src: oItem.app_capsule_image }; $ImgCtn.append( $J('', rgDefaultImageProperties ) ); $ImgCtn.append( $J('', rgImageProperties ) ); $CapCtn.append( $ImgCtn ); var rgPlayIconProperties = { src: 'https://store.cloudflare.steamstatic.com/public/shared/images/apphubs/play_icon80.png', class: "live_stream_play_icon" }; $ImgCtn.append( $J('', rgPlayIconProperties ) ); if( bAddTitleBar ) { $CapCtn.append( GSteamBroadcasts.CreateBroadcastGameTitleAndViewer( oItem, false ) ); } $CapCtn.append( $J('', {'class': 'broadcast_live_stream_icon' } ).append( 'Live') ); GDynamicStore.DecorateDynamicItems( $CapCtn ); GStoreItemData.BindHoverEvents( $CapCtn, oItem.appid ); return $CapCtn; }, CreateBroadcastGameTitleAndViewer: function( oItem, bSurroundWithAnchor ) { $Contents = $J('', {'class': 'title' } ); $Contents.append( $J('', {'class': 'live_stream_app' } ).html( oItem.app_name ) ); $Contents.append( $J('', {'class': 'live_steam_viewers' } ).html( Number( oItem.viewer_count ).toLocaleString() ) ); if( bSurroundWithAnchor ) { var params = { 'class': 'broadcast_footer', 'href': oItem.app_link }; var rgItemData = GStoreItemData.GetCapParams( 'live_broadcast', oItem.appid, 0, null, params ); var $CapCtn = $J('', params ); $CapCtn.append( $Contents ); return $CapCtn; } else return $Contents; }, Render: function() { if ($J('.live_streams_ctn').length == 0 ) { return; } // do an ajax call to get the broadcasters $J.ajax( { url: "https:\/\/store.steampowered.com\/broadcast\/ajaxgetpopularpartnerbroadcasts\/", data: { 'minviews' : 1, // We ask for all streams with a viewer so we can decorate the 'live' tags on all of the capsules on the page. 'tagid' : GSteamBroadcasts.m_tagid, 'genreid' : GSteamBroadcasts.m_genreid, 'categoryid' : GSteamBroadcasts.m_categoryid, 'maxbroadcasts' : GSteamBroadcasts.m_nMaxBroadcasts * 2, // We might need to filter some results out based on the users preference so ask for a few more }, dataType: 'json', type: 'GET' }).done(function( data ) { if ( data.success == 1 && data.filtered.length > 0 ) { for( var i = 0; i < data.filtered.length; i++ ) { var rgAppInfo = GStoreItemData.rgAppData[ data.filtered[i].appid ]; if ( rgAppInfo ) { rgAppInfo.has_live_broadcast = true; // update all broadcast capsules to have live tag var $Capsules = $J('.broadcast_capsule[data-ds-appid=' + data.filtered[i].appid + ']' ).each( function() { $Icon = $J('', {'class': 'broadcast_live_stream_icon' } ).append( 'Live'); $J(this).append( $Icon ); }); } } GStoreItemData.AddStoreItemData( data.rgAppData ); // Filter the apps based on the users preference. Do not reduce the full list size, as we need to // pull the random stream from the entire set of possible 'popular/hub-popular streams' var rgFiltered = data.filtered; if( GSteamBroadcasts.m_fnFilterItemToDisplayFunction ) { rgFiltered = GSteamBroadcasts.m_fnFilterItemToDisplayFunction( data.filtered, 'home', 1, data.filtered.length, { displayed_elsewhere: true } ); } var rgFiltered2 = []; for ( var i = 0; i < rgFiltered.length; i++ ) { if ( rgFiltered[i].popular || ( ( GSteamBroadcasts.m_genreid > 0 || GSteamBroadcasts.m_tagid > 0 ) && rgFiltered[i].hub_popular ) ) { rgFiltered2.push( rgFiltered[i] ); } } var nNumToShowInCarousel = GSteamBroadcasts.m_nMaxBroadcasts; var bShow = false; if( $J('#live_stream_featured').length == 1 && rgFiltered2.length > 0 ) { var nFeatured = Math.floor( Math.random( ) * rgFiltered2.length ); var oItem = rgFiltered2[nFeatured]; var strBroadcastSteamID = oItem.broadcaststeamid; var $CapCtn = GSteamBroadcasts.CreateBroadcastCapsule( oItem, false ); var $elFeaturedContainer = $J('