diff --git a/app/templates/game-menu/choose-hero-view.jade b/app/templates/game-menu/choose-hero-view.jade index 5b65f845a..0356e4611 100644 --- a/app/templates/game-menu/choose-hero-view.jade +++ b/app/templates/game-menu/choose-hero-view.jade @@ -38,8 +38,8 @@ .form-group.select-group label.control-label(for="option-code-language", data-i18n="choose_hero.programming_language") Programming Language select#option-code-language(name="code-language") - for option in languages - option(value=option.id, selected=(me.get('aceConfig', true).language === option.id))= option.name + for option in codeLanguages + option(value=option.id, selected=codeLanguage === option.id)= option.name span.help-block(data-i18n="choose_hero.programming_language_description") Which programming language do you want to use? if level diff --git a/app/views/game-menu/ChooseHeroView.coffee b/app/views/game-menu/ChooseHeroView.coffee index 6e6a905ca..f8dd78329 100644 --- a/app/views/game-menu/ChooseHeroView.coffee +++ b/app/views/game-menu/ChooseHeroView.coffee @@ -13,6 +13,7 @@ module.exports = class ChooseHeroView extends CocoView events: 'click #restart-level-confirm-button': -> Backbone.Mediator.publish 'level:restart', {} 'slide.bs.carousel #hero-carousel': 'onHeroChanged' + 'change #option-code-language': 'onCodeLanguageChanged' shortcuts: 'left': -> @$el.find('#hero-carousel').carousel('prev') @@ -36,7 +37,7 @@ module.exports = class ChooseHeroView extends CocoView context = super(context) context.heroes = @heroes.models context.level = @options.level - context.languages = [ + context.codeLanguages = [ {id: 'python', name: 'Python'} {id: 'javascript', name: 'JavaScript'} {id: 'coffeescript', name: 'CoffeeScript'} @@ -44,6 +45,7 @@ module.exports = class ChooseHeroView extends CocoView {id: 'lua', name: 'Lua (Experimental)'} {id: 'io', name: 'Io (Experimental)'} ] + context.codeLanguage = @codeLanguage = @options.session.get('codeLanguage') ? me.get('aceConfig')?.language ? 'python' context.heroInfo = temporaryHeroInfo context @@ -110,7 +112,9 @@ module.exports = class ChooseHeroView extends CocoView onHidden: -> - + onCodeLanguageChanged: (e) -> + @codeLanguage = @$el.find('#option-code-language').val() + @codeLanguageChanged = true temporaryHeroInfo = captain: diff --git a/app/views/game-menu/GameMenuModal.coffee b/app/views/game-menu/GameMenuModal.coffee index fc190028f..0f108eb8d 100644 --- a/app/views/game-menu/GameMenuModal.coffee +++ b/app/views/game-menu/GameMenuModal.coffee @@ -43,11 +43,11 @@ module.exports = class GameMenuModal extends ModalView onHidden: -> super() subview.onHidden?() for subviewKey, subview of @subviews - patchingMe = @updateHeroConfig() - me.patch() unless patchingMe # Might need to patch for options menu + patchingMe = @updateConfig() + me.patch() unless patchingMe # Might need to patch for options menu, too Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-close', volume: 1 - updateHeroConfig: -> + updateConfig: -> sessionHeroConfig = @options.session.get('heroConfig') ? {} lastHeroConfig = me.get('heroConfig') ? {} thangType = @subviews.choose_hero_view.selectedHero.get 'original' @@ -59,6 +59,13 @@ module.exports = class GameMenuModal extends ModalView patchMe ||= not _.isEqual val, lastHeroConfig[key] sessionHeroConfig[key] = val lastHeroConfig[key] = val + if (codeLanguage = @subviews.choose_hero_view.codeLanguage) and @subviews.choose_hero_view.codeLanguageChanged + patchSession ||= codeLanguage isnt @options.session.get('codeLanguage') + patchMe ||= codeLanguage isnt me.get('aceConfig')?.language + @options.session.set 'codeLanguage', codeLanguage + aceConfig = me.get('aceConfig', true) ? {} + aceConfig.language = codeLanguage + me.set 'aceConfig', aceConfig if patchSession @options.session.set 'heroConfig', sessionHeroConfig @options.session.patch success: -> diff --git a/app/views/play/modal/PlayLevelModal.coffee b/app/views/play/modal/PlayLevelModal.coffee index caca06b7b..2fae2c118 100644 --- a/app/views/play/modal/PlayLevelModal.coffee +++ b/app/views/play/modal/PlayLevelModal.coffee @@ -46,11 +46,11 @@ module.exports = class PlayLevelModal extends ModalView onHidden: -> unless @navigatingToPlay skipSessionSave = not @options.session.get('levelName')? # Has to have been already started. - @updateHeroConfig null, skipSessionSave + @updateConfig null, skipSessionSave Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-close', volume: 1 super() - updateHeroConfig: (callback, skipSessionSave) -> + updateConfig: (callback, skipSessionSave) -> sessionHeroConfig = @options.session.get('heroConfig') ? {} lastHeroConfig = me.get('heroConfig') ? {} thangType = @subviews.choose_hero_view.selectedHero.get 'original' @@ -62,6 +62,13 @@ module.exports = class PlayLevelModal extends ModalView patchMe ||= not _.isEqual val, lastHeroConfig[key] sessionHeroConfig[key] = val lastHeroConfig[key] = val + if (codeLanguage = @subviews.choose_hero_view.codeLanguage) and @subviews.choose_hero_view.codeLanguageChanged + patchSession ||= codeLanguage isnt @options.session.get('codeLanguage') + patchMe ||= codeLanguage isnt me.get('aceConfig')?.language + @options.session.set 'codeLanguage', codeLanguage + aceConfig = me.get('aceConfig', true) ? {} + aceConfig.language = codeLanguage + me.set 'aceConfig', aceConfig if patchMe me.set 'heroConfig', lastHeroConfig me.patch() @@ -81,7 +88,7 @@ module.exports = class PlayLevelModal extends ModalView onClickPlayLevel: (e) -> @showLoading() - @updateHeroConfig => + @updateConfig => @navigatingToPlay = true Backbone.Mediator.publish 'router:navigate', { route: "/play/#{@options.levelPath || 'level'}/#{@options.levelID}",