Initial version of mod detail pages
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
###
|
||||
Crafting Guide - item_controller.coffee
|
||||
|
||||
Copyright (c) 2015 by Redwood Labs
|
||||
All rights reserved.
|
||||
###
|
||||
|
||||
BaseController = require './base_controller'
|
||||
{Url} = require '../constants'
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
module.exports = class ItemController extends BaseController
|
||||
|
||||
constructor: (options={})->
|
||||
if not options.model? then throw new Error 'options.model is required'
|
||||
if not options.modPack? then throw new Error 'options.modPack is required'
|
||||
options.templateName = 'item'
|
||||
super options
|
||||
|
||||
@_modPack = options.modPack
|
||||
|
||||
# BaseController Overrides #####################################################################
|
||||
|
||||
onDidRender: ->
|
||||
@$icon = @$('img')
|
||||
@$name = @$('.itemName')
|
||||
@$nameLink = @$('a')
|
||||
super
|
||||
|
||||
refresh: ->
|
||||
display = @_modPack.findItemDisplay @model.slug
|
||||
|
||||
@$icon.attr 'src', Url.itemIcon display
|
||||
@$name.html display.itemName
|
||||
@$nameLink.attr 'href', Url.item display
|
||||
@@ -37,6 +37,7 @@ module.exports = class ModController extends BaseController
|
||||
@$nameLink = @$('.name a')
|
||||
@$nameText = @$('.name p')
|
||||
@$description = @$('.description p')
|
||||
|
||||
super
|
||||
|
||||
refresh: ->
|
||||
@@ -59,7 +60,7 @@ module.exports = class ModController extends BaseController
|
||||
option.attr 'selected', 'selected'
|
||||
@$version.append option
|
||||
|
||||
# @$nameLink.attr 'href', Url.mod modSlug:@model.slug
|
||||
@$nameLink.attr 'href', Url.mod modSlug:@model.slug
|
||||
@$nameText.html @model.name
|
||||
|
||||
@$description.html @model.description
|
||||
|
||||
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user