Initial version of mod detail pages

This commit is contained in:
Andrew Miner
2015-01-29 10:04:11 -08:00
parent 71b25a8a16
commit 332f64abea
22 changed files with 392 additions and 111 deletions
@@ -5,10 +5,12 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
BaseController = require './base_controller'
{Duration} = require '../constants'
ModPack = require '../models/mod_pack'
RecipeController = require './recipe_controller'
BaseController = require './base_controller'
{Duration} = require '../constants'
Mod = require '../models/mod'
ModPack = require '../models/mod_pack'
ItemController = require './item_controller'
{Url} = require '../constants'
########################################################################################################################
@@ -20,52 +22,117 @@ module.exports = class ModPageController extends BaseController
options.templateName = 'mod_page'
super options
@_modPack = options.modPack
@_recipeControllers = []
@_delayStep = options.delayStep
@_delayStep = options.delayStep
@_effectiveModVersion = null
@_itemControllers = []
@_modPack = options.modPack
Object.defineProperties this,
effectiveModVersion: {get:@_getEffectiveModVersion}
# Event Methods ################################################################################
onVersionChanged: ->
version = @$versionSelector.val()
logger.debug "new version: #{version}"
modVersion = @model.getModVersion version
logger.debug "new mod version: #{modVersion}"
@_effectiveModVersion = modVersion
if modVersion? then modVersion.fetch()
@refresh()
# BaseController Overrides #####################################################################
onDidRender: ->
@$title = @$('h1')
@$recipes = @$('.recipes')
@$name = @$('.name')
@$byline = @$('.byline p')
@$description = @$('.description p')
@$homePageLink = @$('.homePage')
@$items = @$('.items .panel')
@$titleImage = @$('.titleImage img')
@$versionSelector = @$('select.version')
@$wikiLink = @$('.wiki')
super
refresh: ->
@$title.html if @model? then @model.name else ''
controllerIndex = 0
delay = 0
if @model?.activeModVersion?.isLoaded
@$recipes.show duration:Duration.fast
@model.eachItem (item)=>
recipe = item.getPrimaryRecipe()
return if not recipe
item.eachRecipe (recipe)=>
controller = @_recipeControllers[controllerIndex]
if not controller?
_.delay (=> @_createRecipeController recipe), delay
delay += @_delayStep
else
controller.model = recipe
controllerIndex += 1
else
@$recipes.hide duration:Duration.fast
while @_recipeControllers.length > controllerIndex
controller = @_recipeControllers.pop()
controller.$el.slideUp duration:Duration.fast, complete:-> @remove()
@$name.html if @model? then @model.name else ''
@$byline.html if @model? then "by #{@model.author}" else ''
@$titleImage.attr 'src', (if @model? then Url.modLogoImage(modSlug:@model.slug) else '')
@$description.html if @model? then @model.description else ''
@_refreshHomePageLink()
@_refreshItems()
@_refreshVersions()
super
# Backbone.View Methods ########################################################################
events:
'change select.version': 'onVersionChanged'
# Private Methods ##############################################################################
_createRecipeController: (recipe)->
controller = new RecipeController model:recipe, modPack:@_modPack
_createItemController: (item)->
controller = new ItemController model:item, modPack:@_modPack
controller.$el.hide()
controller.render()
@_recipeControllers.push controller
@$recipes.append controller.$el
@_itemControllers.push controller
@$items.append controller.$el
controller.$el.slideDown duration:Duration.fast
_getEffectiveModVersion: ->
return @_effectiveModVersion if @_effectiveModVersion?
return null unless @model?
modVersion = @model.activeModVersion
modVersion ?= @model.getModVersion Mod.Version.Latest
return modVersion
_refreshHomePageLink: ->
if @model.homePageUrl?
@$homePageLink.fadeIn duration:Duration.fast
@$homePageLink.attr 'href', @model.homePageUrl
else
@$homePageLink.fadeOut duration:Duration.fast
_refreshItems: ->
controllerIndex = 0
delay = 0
effectiveModVersion = @effectiveModVersion
if effectiveModVersion?
@$items.show duration:Duration.fast
effectiveModVersion.eachItem (item)=>
controller = @_itemControllers[controllerIndex]
if not controller?
_.delay (=> @_createItemController item), delay
delay += @_delayStop
else
controller.model = item
controllerIndex += 1
else
@$items.hide duration:Duration.fast
while @_itemControllers.length > controllerIndex
controller = @_itemControllers.pop()
controller.$el.slideUp duration:Duration.fast, complete:-> @remove()
_refreshVersions: ->
@$versionSelector.empty()
return unless @model?
effectiveModVersion = @effectiveModVersion
versionCount = 0
@model.eachModVersion (modVersion)=>
option = $("<option value=\"#{modVersion.version}\">#{modVersion.version}</option>")
if modVersion is effectiveModVersion
option.attr 'selected', 'selected'
@$versionSelector.append option
versionCount++
if versionCount <= 1
@$versionSelector.attr 'disabled', 'disabled'
else
@$versionSelector.removeAttr 'disabled'