Files
website/src/client/site/browse_page/browse_page_controller.coffee
T

99 lines
3.2 KiB
CoffeeScript

#
# Crafting Guide - browse_page_controller.coffee
#
# Copyright © 2014-2016 by Redwood Labs
# All rights reserved.
#
{CraftingGuideClient} = require('crafting-guide-common').api
ModBallotController = require './mod_ballot/mod_ballot_controller'
ModTileController = require './mod_tile/mod_tile_controller'
PageController = require '../page_controller'
########################################################################################################################
module.exports = class BrowsePageController extends PageController
constructor: (options={})->
if not options.client then throw new Error 'options.client is required'
if not options.imageLoader then throw new Error 'options.imageLoader is required'
if not options.modPack then throw new Error 'options.modPack is required'
options.templateName = 'browse_page'
super options
@_client = options.client
@_imageLoader = options.imageLoader
@_modPack = options.modPack
@_tileControllers = []
@_client.on c.event.change, => @tryRefresh()
@_modPack.on c.event.change, => @tryRefresh()
# Property Methods #############################################################################
Object.defineProperties @prototype,
user:
get: -> @_user
set: (newUser)->
@_user = newUser
@tryRefresh()
# PageController Overrides #####################################################################
getMetaDescription: ->
return c.text.browseDescription()
getTitle: ->
return "Browse"
# BaseController Overrides #####################################################################
onDidRender: ->
@_modBallotController = @addChild ModBallotController, '.view__mod_ballot',
client: @_client
imageLoader: @_imageLoader
user: @_user
@$tileContainer = @$('.tile_container')
refresh: ->
@_modBallotController.user = @user
@_refreshModTiles()
@_refreshBallot()
super
# Backbone.View Overrides ######################################################################
events: ->
return _.extend super,
'click a': 'routeLinkClick'
# Private Methods ##############################################################################
_refreshBallot: ->
if @_client.status is CraftingGuideClient.Status.Down
@_modBallotController.hide()
else
@_modBallotController.show()
_refreshModTiles: ->
index = 0
mods = @_modPack.getAllMods()
for mod in mods
controller = @_tileControllers[index]
if not controller
controller = new ModTileController model:mod, router:@router
controller.render()
@$tileContainer.append controller.$el
@_tileControllers.push controller
else
controller.model = mod
index++
while @_tileControllers.length > mods.length
controller = @_tileControllers.pop()
controller.remove()