Allowing reordering of levels in Campaign. Reversing CampaignEditor levels before save so that when the save magically reverses them again, the order is preserved.

This commit is contained in:
Nick Winter 2015-02-26 11:31:16 -08:00
parent 52bc660391
commit 32a95afbd0
2 changed files with 18 additions and 5 deletions

View file

@ -266,6 +266,7 @@ module.exports = class CampaignEditorView extends RootView
class LevelsNode extends TreemaObjectNode
valueClass: 'treema-levels'
@levels: {}
ordered: true
buildValueForDisplay: (valEl, data) ->
@buildValueForDisplaySimply valEl, ''+_.size(data)

View file

@ -6,13 +6,13 @@ module.exports = class SaveCampaignModal extends ModalView
id: 'save-campaign-modal'
template: template
plain: true
events:
'click #save-button': 'onClickSaveButton'
constructor: (options, @modelsToSave) ->
super(options)
getRenderData: ->
c = super()
c.modelsToSave = @modelsToSave
@ -26,9 +26,21 @@ module.exports = class SaveCampaignModal extends ModalView
@insertSubView(deltaView, $el)
)
super()
onClickSaveButton: ->
@showLoading()
@reverseLevelsBeforeSave()
modelsBeingSaved = (model.patch() for model in @modelsToSave.models)
modelsBeingSaved = modelsBeingSaved
$.when(_.compact(modelsBeingSaved)...).done(-> document.location.reload())
$.when(_.compact(modelsBeingSaved)...).done(-> document.location.reload())
reverseLevelsBeforeSave: ->
# For some unfathomable reason, not in our code anywhere, the levels get reversed during the save somehow.
# Since we want to maintain their orders, we reverse them first, so that when they're reversed again, it's right.
# Yaaaay!
return unless campaign = _.find @modelsToSave.models, (m) -> m.constructor.className is 'Campaign'
levelsReversed = {}
levels = campaign.get 'levels'
levelIDs = _.keys(levels).reverse()
for levelID in levelIDs
levelsReversed[levelID] = levels[levelID]
campaign.set 'levels', levelsReversed