Files
website/src/scripts/crafting_guide_router.coffee
T

66 lines
2.1 KiB
CoffeeScript

###
Crafting Guide - router.coffee
Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
{Duration} = require './constants'
ItemPageController = require './controllers/item_page_controller'
{Opacity} = require './constants'
UrlParams = require './url_params'
########################################################################################################################
module.exports = class CraftingGuideRouter extends Backbone.Router
constructor: (options={})->
@_page = null
@_pageControllers = {}
super options
# Backbone.Router Overrides ####################################################################
routes:
'': 'root'
'item(/:name)': 'item'
# Route Methods ################################################################################
root: ->
params = new UrlParams recipeName:{type:'string'}, count:{type:'integer'}
@item params.recipeName, params.count
item: (name, quantity=1)->
@_pageControllers.item ?= new ItemPageController
@_pageControllers.item.model.params = name:name, quantity:quantity
@_setPage 'item'
# Private Methods ##############################################################################
_setPage: (controllerName)->
controller = @_pageControllers[controllerName]
if not controller? then throw new Error "cannot find controller named: #{controllerName}"
return if @_page is controller
logger.info "changing to #{controllerName} page"
showDuration = Duration.normal
show = =>
@_page = controller
controller.onWillShow()
controller.render()
$pageContent = $('.page')
controller.$el.addClass 'page'
$pageContent.replaceWith controller.$el
controller.$el.fadeIn showDuration, ->
controller.onDidShow()
if @_mainController?
showDuration = Duration.fast
@_page.$el.fadeOut Duration.fast, show
else
show()