Update AdsenseController to show ads to fit space

This commit is contained in:
Andrew Miner
2015-04-22 16:28:27 -07:00
parent a4120fad2f
commit 4ca72fe512
13 changed files with 74 additions and 37 deletions
@@ -7,6 +7,7 @@ All rights reserved.
BaseController = require './base_controller'
{Adsense} = require '../constants'
{Duration} = require '../constants'
{ProductionEnvs} = require '../constants'
########################################################################################################################
@@ -14,32 +15,64 @@ BaseController = require './base_controller'
module.exports = class AdsenseController extends BaseController
constructor: (options={})->
options.model ?= 'skyscraper_sidebar'
options.tagName = 'ins'
options.templateName = "adsense_#{options.model}"
options.templateName = "adsense_sidebar_skyscraper"
super options
@_adsEnabled = global.env in ProductionEnvs
@_adsEnabled = global.env in ProductionEnvs
@_adHeight = 630
@_adCount = 0
@_waiting = false
# Public Methods ###############################################################################
fillAdPositions: ->
if @_adCount > 0
return unless @_adCount < Adsense.slotIds.length
return unless @$sidebar? and @$mainBody?
return unless @$sidebar.height() + @_adHeight < @$mainBody.height()
$adContainer = $('<div class="sidebar_skyscraper"></div>')
@$el.append $adContainer
if @_adsEnabled
$ad = $('<ins class="adsbygoogle"></ins>')
$ad.attr 'data-ad-client', Adsense.clientId
$ad.attr 'data-ad-slot', Adsense.slotIds[@_adCount]
$ad.css 'height':'600px', 'width':'160px'
$adContainer.append $ad
@_loadAds()
@_adCount += 1
_.defer => @fillAdPositions()
# BaseController Overrides #####################################################################
render: ->
if @_adsEnabled
super
@$el.attr 'data-ad-client', Adsense.clientId
@$el.attr 'data-ad-slot', Adsense.slotId
else
@$el.addClass 'placeholder'
@_rendered = true
@$el.addClass @model
onDidRender: ->
@$mainBody = $('.mainBody')
@$sidebar = $('.sidebar')
super
refresh: ->
@_waitForPageReadiness()
super
# Private Methods #############################################################################
_loadAds: ->
return unless @_adsEnabled
logger.info "Loading #{@_adCount} Google AdSense ads"
try
global.adsbygoogle ||= []
global.adsbygoogle.push {}
catch e
logger.warning "Could not load Adsense ad: #{e}"
_waitForPageReadiness: ->
return if @_waiting
if @$mainBody.height() < @_adHeight / 2
@_waiting = true
_.delay (=> @_waiting = false; @_waitForPageReadiness()), Duration.normal
else
@fillAdPositions()
@@ -31,11 +31,13 @@ module.exports = class BrowsePageController extends PageController
# BaseController Overrides #####################################################################
onDidRender: ->
@adsenseController = @addChild AdsenseController, '.view__adsense', model:'sidebar_skyscraper'
@adsenseController = @addChild AdsenseController, '.view__adsense'
@$modContainer = @$('.mods')
super
refresh: ->
@adsenseController.fillAdPositions()
@_controllers ?= []
controllerIndex = 0
@@ -30,6 +30,10 @@ module.exports = class ConfigurePageController extends PageController
# BaseController Overrides #####################################################################
onDidRender: ->
@adsenseController = @addChild AdsenseController, '.view__adsense', model:'sidebar_skyscraper'
@adsenseController = @addChild AdsenseController, '.view__adsense'
@modPackController = @addChild ModPackController, '.view__mod_pack', model:@modPack, storage:@storage
super
refresh: ->
@adsenseController.fillAdPositions()
super
@@ -133,6 +133,7 @@ module.exports = class CraftPageController extends PageController
refresh: ->
@_refreshSectionVisibility()
@_refreshSteps()
@adsenseController.fillAdPositions()
super
# Backbone.View Overrides ########################################################################
@@ -19,7 +19,7 @@ module.exports = class HomeController extends PageController
# BaseController Overrides #####################################################################
onDidRender: ->
@adsenseController = @addChild AdsenseController, '.view__adsense', model:'sidebar_skyscraper'
@adsenseController = @addChild AdsenseController, '.view__adsense'
super
# Backbone.View Overrides ######################################################################
@@ -66,7 +66,7 @@ module.exports = class ModPageController extends PageController
# BaseController Overrides #####################################################################
onDidRender: ->
@adsenseController = @addChild AdsenseController, '.view__adsense', model:'sidebar_skyscraper'
@adsenseController = @addChild AdsenseController, '.view__adsense'
@$name = @$('.name')
@$byline = @$('.byline p')
@@ -84,6 +84,8 @@ module.exports = class ModPageController extends PageController
super
refresh: ->
@adsenseController.fillAdPositions()
if @model?.isLoaded and @effectiveModVersion?.isLoaded
@$byline.html "by #{@model.author}"
@$description.html @model.description