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:
Andrew Miner
2015-01-29 13:59:12 -08:00
parent d5140f963d
commit 841af15d5e
13 changed files with 63 additions and 66 deletions
@@ -39,6 +39,11 @@ module.exports = class BaseController extends Backbone.View
refresh: ->
logger.verbose "#{this} refreshing"
routeLinkClick: (event)->
href = $(event.currentTarget).attr 'href'
router.navigate href, trigger:true
return false
# Event Methods ################################################################################
onDidModelChange: ->
@@ -78,6 +83,9 @@ module.exports = class BaseController extends Backbone.View
# Backbone.View Overrides ######################################################################
events: ->
return {}
render: (options={})->
return this unless not @_rendered or options.force
@@ -23,13 +23,6 @@ module.exports = class CraftingGridController extends BaseController
@_modPack = options.modPack
@_slotCount = 9
# Event Methods ################################################################################
onLinkClicked: (event)->
href = $(event.currentTarget).attr 'href'
router.navigate href, trigger:true
return false
# BaseController Methods #######################################################################
onDidRender: ->
@@ -61,8 +54,9 @@ module.exports = class CraftingGridController extends BaseController
# Backbone.View Overrides ######################################################################
events:
'click td a': 'onLinkClicked'
events: ->
return _.extend super,
'click td a': 'routeLinkClick'
# Private Methods ##############################################################################
@@ -84,7 +84,8 @@ module.exports = class CraftingTableController extends BaseController
# Backbone.View Overrides ######################################################################
events:
'click .next': 'onNextClicked'
'click .prev': 'onPrevClicked'
'click .problem a': 'onReportProblem'
events: ->
return _.extend super,
'click .next': 'onNextClicked'
'click .prev': 'onPrevClicked'
'click .problem a': 'onReportProblem'
@@ -104,8 +104,9 @@ module.exports = class FeedbackController extends BaseController
# Backbone.View Methods ########################################################################
events:
'click .label': 'onToggle'
'click button': 'onSendClicked'
'input textarea': 'onTextChanged'
'keyup textarea': 'onTextChanged'
events: ->
return _.extend super,
'click .label': 'onToggle'
'click button': 'onSendClicked'
'input textarea': 'onTextChanged'
'keyup textarea': 'onTextChanged'
@@ -28,5 +28,6 @@ module.exports = class HeaderController extends BaseController
# Backbone.View Overrides ######################################################################
events:
'click a.logo': 'onLogoClicked'
events: ->
return _.extend super,
'click a.logo': 'onLogoClicked'
@@ -152,16 +152,17 @@ module.exports = class InventoryController extends BaseController
# Backbone.View Overrides ######################################################################
events:
'blur input[name="name"]': 'onNameFieldBlur'
'blur input[name="quantity"]': 'onQuantityFieldBlur'
'click button[name="add"]': 'onAddButtonClicked'
'click button[name="clear"]': 'onClearButtonClicked'
'focus input[name="name"]': 'onNameFieldFocused'
'focus input[name="quantity"]': 'onQuantityFieldFocused'
'input input[name="name"]': 'onNameFieldChanged'
'input input[name="quantity"]': 'onQuantityFieldChanged'
'keyup input[name="name"]': 'onNameFieldKeyUp'
events: ->
return _.extend super,
'blur input[name="name"]': 'onNameFieldBlur'
'blur input[name="quantity"]': 'onQuantityFieldBlur'
'click button[name="add"]': 'onAddButtonClicked'
'click button[name="clear"]': 'onClearButtonClicked'
'focus input[name="name"]': 'onNameFieldFocused'
'focus input[name="quantity"]': 'onQuantityFieldFocused'
'input input[name="name"]': 'onNameFieldChanged'
'input input[name="quantity"]': 'onQuantityFieldChanged'
'keyup input[name="name"]': 'onNameFieldKeyUp'
# Private Methods ##############################################################################
@@ -20,12 +20,6 @@ module.exports = class ItemController extends BaseController
@_modPack = options.modPack
# Event Methods ################################################################################
onLinkClicked: ->
router.navigate @$nameLink.attr('href'), trigger:true
return false
# BaseController Overrides #####################################################################
onDidRender: ->
@@ -43,5 +37,6 @@ module.exports = class ItemController extends BaseController
# Backbone.View Overrides ######################################################################
events:
'click a': 'onLinkClicked'
events: ->
return _.extend super,
'click a': 'routeLinkClick'
@@ -89,8 +89,9 @@ module.exports = class ItemPageController extends BaseController
# Backbone.View Overrides ######################################################################
events:
'change .includeTools': 'onToolsBoxToggled'
events: ->
return _.extend super,
'change .includeTools': 'onToolsBoxToggled'
# Private Methods ##############################################################################
@@ -26,10 +26,6 @@ module.exports = class ModController extends BaseController
# Event Methods ################################################################################
onNameClicked: (event)->
router.navigate @$nameLink.attr('href'), trigger:true
return false
onVersionChanged: ->
@model.activeVersion = @$version.val()
@_plan.removeUncraftableItems()
@@ -71,6 +67,7 @@ module.exports = class ModController extends BaseController
# Backbone.View Overrides ######################################################################
events:
'change .version': 'onVersionChanged'
'click .name a': 'onNameClicked'
events: ->
return _.extend super,
'change .version': 'onVersionChanged'
'click a': 'routeLinkClick'
@@ -74,5 +74,6 @@ module.exports = class ModPackController extends BaseController
# Backbone.View Overrides ######################################################################
events:
'click button[name="suggestMod"]': 'onSuggestModClicked'
events: ->
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'))
@$output = @$('.output')
super
refresh: ->