Fix bugs in intra-site linking
* Refactor event handling in controllers to use a method to define the hash (and thereby allow inheritance) * Refactor link handling so that links which should be handled by the router can be handled by the base class * Change the router to throw out controllers for pages which aren't on-screen (and thereby avoid a lot of weirdness)
This commit is contained in:
@@ -39,6 +39,11 @@ module.exports = class BaseController extends Backbone.View
|
|||||||
refresh: ->
|
refresh: ->
|
||||||
logger.verbose "#{this} refreshing"
|
logger.verbose "#{this} refreshing"
|
||||||
|
|
||||||
|
routeLinkClick: (event)->
|
||||||
|
href = $(event.currentTarget).attr 'href'
|
||||||
|
router.navigate href, trigger:true
|
||||||
|
return false
|
||||||
|
|
||||||
# Event Methods ################################################################################
|
# Event Methods ################################################################################
|
||||||
|
|
||||||
onDidModelChange: ->
|
onDidModelChange: ->
|
||||||
@@ -78,6 +83,9 @@ module.exports = class BaseController extends Backbone.View
|
|||||||
|
|
||||||
# Backbone.View Overrides ######################################################################
|
# Backbone.View Overrides ######################################################################
|
||||||
|
|
||||||
|
events: ->
|
||||||
|
return {}
|
||||||
|
|
||||||
render: (options={})->
|
render: (options={})->
|
||||||
return this unless not @_rendered or options.force
|
return this unless not @_rendered or options.force
|
||||||
|
|
||||||
|
|||||||
@@ -23,13 +23,6 @@ module.exports = class CraftingGridController extends BaseController
|
|||||||
@_modPack = options.modPack
|
@_modPack = options.modPack
|
||||||
@_slotCount = 9
|
@_slotCount = 9
|
||||||
|
|
||||||
# Event Methods ################################################################################
|
|
||||||
|
|
||||||
onLinkClicked: (event)->
|
|
||||||
href = $(event.currentTarget).attr 'href'
|
|
||||||
router.navigate href, trigger:true
|
|
||||||
return false
|
|
||||||
|
|
||||||
# BaseController Methods #######################################################################
|
# BaseController Methods #######################################################################
|
||||||
|
|
||||||
onDidRender: ->
|
onDidRender: ->
|
||||||
@@ -61,8 +54,9 @@ module.exports = class CraftingGridController extends BaseController
|
|||||||
|
|
||||||
# Backbone.View Overrides ######################################################################
|
# Backbone.View Overrides ######################################################################
|
||||||
|
|
||||||
events:
|
events: ->
|
||||||
'click td a': 'onLinkClicked'
|
return _.extend super,
|
||||||
|
'click td a': 'routeLinkClick'
|
||||||
|
|
||||||
# Private Methods ##############################################################################
|
# Private Methods ##############################################################################
|
||||||
|
|
||||||
|
|||||||
@@ -84,7 +84,8 @@ module.exports = class CraftingTableController extends BaseController
|
|||||||
|
|
||||||
# Backbone.View Overrides ######################################################################
|
# Backbone.View Overrides ######################################################################
|
||||||
|
|
||||||
events:
|
events: ->
|
||||||
'click .next': 'onNextClicked'
|
return _.extend super,
|
||||||
'click .prev': 'onPrevClicked'
|
'click .next': 'onNextClicked'
|
||||||
'click .problem a': 'onReportProblem'
|
'click .prev': 'onPrevClicked'
|
||||||
|
'click .problem a': 'onReportProblem'
|
||||||
|
|||||||
@@ -104,8 +104,9 @@ module.exports = class FeedbackController extends BaseController
|
|||||||
|
|
||||||
# Backbone.View Methods ########################################################################
|
# Backbone.View Methods ########################################################################
|
||||||
|
|
||||||
events:
|
events: ->
|
||||||
'click .label': 'onToggle'
|
return _.extend super,
|
||||||
'click button': 'onSendClicked'
|
'click .label': 'onToggle'
|
||||||
'input textarea': 'onTextChanged'
|
'click button': 'onSendClicked'
|
||||||
'keyup textarea': 'onTextChanged'
|
'input textarea': 'onTextChanged'
|
||||||
|
'keyup textarea': 'onTextChanged'
|
||||||
|
|||||||
@@ -28,5 +28,6 @@ module.exports = class HeaderController extends BaseController
|
|||||||
|
|
||||||
# Backbone.View Overrides ######################################################################
|
# Backbone.View Overrides ######################################################################
|
||||||
|
|
||||||
events:
|
events: ->
|
||||||
'click a.logo': 'onLogoClicked'
|
return _.extend super,
|
||||||
|
'click a.logo': 'onLogoClicked'
|
||||||
|
|||||||
@@ -152,16 +152,17 @@ module.exports = class InventoryController extends BaseController
|
|||||||
|
|
||||||
# Backbone.View Overrides ######################################################################
|
# Backbone.View Overrides ######################################################################
|
||||||
|
|
||||||
events:
|
events: ->
|
||||||
'blur input[name="name"]': 'onNameFieldBlur'
|
return _.extend super,
|
||||||
'blur input[name="quantity"]': 'onQuantityFieldBlur'
|
'blur input[name="name"]': 'onNameFieldBlur'
|
||||||
'click button[name="add"]': 'onAddButtonClicked'
|
'blur input[name="quantity"]': 'onQuantityFieldBlur'
|
||||||
'click button[name="clear"]': 'onClearButtonClicked'
|
'click button[name="add"]': 'onAddButtonClicked'
|
||||||
'focus input[name="name"]': 'onNameFieldFocused'
|
'click button[name="clear"]': 'onClearButtonClicked'
|
||||||
'focus input[name="quantity"]': 'onQuantityFieldFocused'
|
'focus input[name="name"]': 'onNameFieldFocused'
|
||||||
'input input[name="name"]': 'onNameFieldChanged'
|
'focus input[name="quantity"]': 'onQuantityFieldFocused'
|
||||||
'input input[name="quantity"]': 'onQuantityFieldChanged'
|
'input input[name="name"]': 'onNameFieldChanged'
|
||||||
'keyup input[name="name"]': 'onNameFieldKeyUp'
|
'input input[name="quantity"]': 'onQuantityFieldChanged'
|
||||||
|
'keyup input[name="name"]': 'onNameFieldKeyUp'
|
||||||
|
|
||||||
# Private Methods ##############################################################################
|
# Private Methods ##############################################################################
|
||||||
|
|
||||||
|
|||||||
@@ -20,12 +20,6 @@ module.exports = class ItemController extends BaseController
|
|||||||
|
|
||||||
@_modPack = options.modPack
|
@_modPack = options.modPack
|
||||||
|
|
||||||
# Event Methods ################################################################################
|
|
||||||
|
|
||||||
onLinkClicked: ->
|
|
||||||
router.navigate @$nameLink.attr('href'), trigger:true
|
|
||||||
return false
|
|
||||||
|
|
||||||
# BaseController Overrides #####################################################################
|
# BaseController Overrides #####################################################################
|
||||||
|
|
||||||
onDidRender: ->
|
onDidRender: ->
|
||||||
@@ -43,5 +37,6 @@ module.exports = class ItemController extends BaseController
|
|||||||
|
|
||||||
# Backbone.View Overrides ######################################################################
|
# Backbone.View Overrides ######################################################################
|
||||||
|
|
||||||
events:
|
events: ->
|
||||||
'click a': 'onLinkClicked'
|
return _.extend super,
|
||||||
|
'click a': 'routeLinkClick'
|
||||||
|
|||||||
@@ -89,8 +89,9 @@ module.exports = class ItemPageController extends BaseController
|
|||||||
|
|
||||||
# Backbone.View Overrides ######################################################################
|
# Backbone.View Overrides ######################################################################
|
||||||
|
|
||||||
events:
|
events: ->
|
||||||
'change .includeTools': 'onToolsBoxToggled'
|
return _.extend super,
|
||||||
|
'change .includeTools': 'onToolsBoxToggled'
|
||||||
|
|
||||||
# Private Methods ##############################################################################
|
# Private Methods ##############################################################################
|
||||||
|
|
||||||
|
|||||||
@@ -26,10 +26,6 @@ module.exports = class ModController extends BaseController
|
|||||||
|
|
||||||
# Event Methods ################################################################################
|
# Event Methods ################################################################################
|
||||||
|
|
||||||
onNameClicked: (event)->
|
|
||||||
router.navigate @$nameLink.attr('href'), trigger:true
|
|
||||||
return false
|
|
||||||
|
|
||||||
onVersionChanged: ->
|
onVersionChanged: ->
|
||||||
@model.activeVersion = @$version.val()
|
@model.activeVersion = @$version.val()
|
||||||
@_plan.removeUncraftableItems()
|
@_plan.removeUncraftableItems()
|
||||||
@@ -71,6 +67,7 @@ module.exports = class ModController extends BaseController
|
|||||||
|
|
||||||
# Backbone.View Overrides ######################################################################
|
# Backbone.View Overrides ######################################################################
|
||||||
|
|
||||||
events:
|
events: ->
|
||||||
'change .version': 'onVersionChanged'
|
return _.extend super,
|
||||||
'click .name a': 'onNameClicked'
|
'change .version': 'onVersionChanged'
|
||||||
|
'click a': 'routeLinkClick'
|
||||||
|
|||||||
@@ -74,5 +74,6 @@ module.exports = class ModPackController extends BaseController
|
|||||||
|
|
||||||
# Backbone.View Overrides ######################################################################
|
# Backbone.View Overrides ######################################################################
|
||||||
|
|
||||||
events:
|
events: ->
|
||||||
'click button[name="suggestMod"]': 'onSuggestModClicked'
|
return _.extend super,
|
||||||
|
'click button[name="suggestMod"]': 'onSuggestModClicked'
|
||||||
|
|||||||
@@ -23,5 +23,3 @@ module.exports = class RecipeStepController extends BaseController
|
|||||||
@$slotImages = (@$slots.push $(el) for el in @$('.table-slot img'))
|
@$slotImages = (@$slots.push $(el) for el in @$('.table-slot img'))
|
||||||
@$output = @$('.output')
|
@$output = @$('.output')
|
||||||
super
|
super
|
||||||
|
|
||||||
refresh: ->
|
|
||||||
@@ -65,14 +65,14 @@ module.exports = class CraftingGuideRouter extends Backbone.Router
|
|||||||
@item params.recipeName, params.count
|
@item params.recipeName, params.count
|
||||||
|
|
||||||
item: (name, quantity=1)->
|
item: (name, quantity=1)->
|
||||||
@_pageControllers.item ?= new ItemPageController @_defaultOptions
|
controller = new ItemPageController @_defaultOptions
|
||||||
@_pageControllers.item.model.params = name:name, quantity:quantity
|
controller.model.params = name:name, quantity:quantity
|
||||||
@_setPage 'item'
|
@_setPage 'item', controller
|
||||||
|
|
||||||
mod: (slug)->
|
mod: (slug)->
|
||||||
@_pageControllers.mod ?= new ModPageController @_defaultOptions
|
controller = new ModPageController @_defaultOptions
|
||||||
@_pageControllers.mod.model = @modPack.getMod slug
|
controller.model = @modPack.getMod slug
|
||||||
@_setPage 'mod'
|
@_setPage 'mod', controller
|
||||||
|
|
||||||
# Private Methods ##############################################################################
|
# Private Methods ##############################################################################
|
||||||
|
|
||||||
@@ -85,15 +85,14 @@ module.exports = class CraftingGuideRouter extends Backbone.Router
|
|||||||
else
|
else
|
||||||
logger.info "Suppressing GA page view: #{pathname}"
|
logger.info "Suppressing GA page view: #{pathname}"
|
||||||
|
|
||||||
_setPage: (controllerName)->
|
_setPage: (page, controller)->
|
||||||
controller = @_pageControllers[controllerName]
|
return if @_page is page
|
||||||
if not controller? then throw new Error "cannot find controller named: #{controllerName}"
|
|
||||||
return if @_page is controller
|
|
||||||
|
|
||||||
logger.info "changing to #{controllerName} page"
|
logger.info "changing to #{page} page"
|
||||||
showDuration = Duration.normal
|
showDuration = Duration.normal
|
||||||
show = =>
|
show = =>
|
||||||
@_page = controller
|
@_page = page
|
||||||
|
@_controller = controller
|
||||||
|
|
||||||
controller.onWillShow()
|
controller.onWillShow()
|
||||||
controller.render()
|
controller.render()
|
||||||
@@ -105,8 +104,8 @@ module.exports = class CraftingGuideRouter extends Backbone.Router
|
|||||||
controller.$el.fadeIn showDuration, ->
|
controller.$el.fadeIn showDuration, ->
|
||||||
controller.onDidShow()
|
controller.onDidShow()
|
||||||
|
|
||||||
if @_mainController?
|
if @_controller?
|
||||||
showDuration = Duration.fast
|
showDuration = Duration.fast
|
||||||
@_page.$el.fadeOut Duration.fast, show
|
@_controller.$el.fadeOut showDuration, show
|
||||||
else
|
else
|
||||||
show()
|
show()
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ global.logger = new Logger
|
|||||||
switch window.location.hostname
|
switch window.location.hostname
|
||||||
when 'localhost'
|
when 'localhost'
|
||||||
global.env = 'development'
|
global.env = 'development'
|
||||||
logger.level = Logger.DEBUG
|
logger.level = Logger.INFO
|
||||||
when 'new.crafting-guide.com'
|
when 'new.crafting-guide.com'
|
||||||
global.env = 'staging'
|
global.env = 'staging'
|
||||||
logger.level = Logger.VERBOSE
|
logger.level = Logger.VERBOSE
|
||||||
|
|||||||
Reference in New Issue
Block a user