137 lines
4.7 KiB
CoffeeScript
137 lines
4.7 KiB
CoffeeScript
###
|
|
Crafting Guide - mod_page_controller.coffee
|
|
|
|
Copyright (c) 2015 by Redwood Labs
|
|
All rights reserved.
|
|
###
|
|
|
|
BaseController = require './base_controller'
|
|
{Duration} = require '../constants'
|
|
Mod = require '../models/mod'
|
|
ModPack = require '../models/mod_pack'
|
|
ItemController = require './item_controller'
|
|
{Url} = require '../constants'
|
|
|
|
########################################################################################################################
|
|
|
|
module.exports = class ModPageController extends BaseController
|
|
|
|
constructor: (options={})->
|
|
if not options.modPack? then throw new Error 'options.modPack is required'
|
|
options.delayStep ?= 10
|
|
options.templateName = 'mod_page'
|
|
super options
|
|
|
|
@_delayStep = options.delayStep
|
|
@_effectiveModVersion = null
|
|
@_itemControllers = []
|
|
@_modPack = options.modPack
|
|
|
|
Object.defineProperties this,
|
|
effectiveModVersion: {get:@_getEffectiveModVersion}
|
|
|
|
# Event Methods ################################################################################
|
|
|
|
onVersionChanged: ->
|
|
version = @$versionSelector.val()
|
|
modVersion = @model.getModVersion version
|
|
@_effectiveModVersion = modVersion
|
|
if modVersion? then modVersion.fetch()
|
|
@refresh()
|
|
|
|
# BaseController Overrides #####################################################################
|
|
|
|
onDidRender: ->
|
|
@$name = @$('.name')
|
|
@$byline = @$('.byline p')
|
|
@$description = @$('.description p')
|
|
@$homePageLink = @$('.homePage')
|
|
@$items = @$('.items .panel')
|
|
@$titleImage = @$('.titleImage img')
|
|
@$versionSelector = @$('select.version')
|
|
@$wikiLink = @$('.wiki')
|
|
|
|
super
|
|
|
|
refresh: ->
|
|
@$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 ##############################################################################
|
|
|
|
_createItemController: (item)->
|
|
controller = new ItemController model:item, modPack:@_modPack
|
|
controller.$el.hide()
|
|
controller.render()
|
|
|
|
@_itemControllers.push controller
|
|
@$items.append controller.$el
|
|
controller.$el.fadeIn 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 += @_delayStep
|
|
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'
|