diff --git a/src/js/level/builder.js b/src/js/level/builder.js index b913ae88..9a9027aa 100644 --- a/src/js/level/builder.js +++ b/src/js/level/builder.js @@ -42,19 +42,31 @@ var parse = util.genParseCommand(regexMap, 'processLevelBuilderCommand'); var LevelBuilder = Level.extend({ initialize: function(options) { options = options || {}; - options.level = options.level || {}; + options.level = {}; var locale = intl.getLocale(); options.level.startDialog = {}; options.level.startDialog[locale] = { childViews: intl.getDialog(require('../dialogs/levelBuilder')) }; + + // if we are editing a level our behavior is a bit different + var editLevelJSON; + if (options.editLevel) { + editLevelJSON = Main.getLevelArbiter().getLevel(options.editLevel); + options.level = editLevelJSON; + } + LevelBuilder.__super__.initialize.apply(this, [options]); + if (!options.editLevel) { + this.startDialogObj = undefined; + this.definedGoal = false; + } else { + this.startDialogObj = editLevelJSON.startDialog[locale]; + this.definedGoal = true; + } - this.startDialogObj = undefined; - this.definedGoal = false; - - // we wont be using this stuff, and its to delete to ensure we overwrite all functions that + // we wont be using this stuff, and it is deleted to ensure we overwrite all functions that // include that functionality delete this.treeCompare; delete this.solved; @@ -68,9 +80,11 @@ var LevelBuilder = Level.extend({ }, initGoalData: function() { - // add some default behavior in the beginning - this.level.goalTreeString = '{"branches":{"master":{"target":"C1","id":"master"},"makeLevel":{"target":"C2","id":"makeLevel"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"makeLevel","id":"HEAD"}}'; - this.level.solutionCommand = 'git checkout -b makeLevel; git commit'; + // add some default behavior in the beginning if we are not editing + if (!this.options.editLevel) { + this.level.goalTreeString = '{"branches":{"master":{"target":"C1","id":"master"},"makeLevel":{"target":"C2","id":"makeLevel"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"makeLevel","id":"HEAD"}}'; + this.level.solutionCommand = 'git checkout -b makeLevel; git commit'; + } LevelBuilder.__super__.initGoalData.apply(this, arguments); }, @@ -272,7 +286,7 @@ var LevelBuilder = Level.extend({ }, finish: function(command, deferred) { - if (!this.gitCommandsIssued.length || !this.definedGoal) { + if (!this.options.editLevel && (!this.gitCommandsIssued.length || !this.definedGoal)) { command.set('error', new Errors.GitError({ msg: intl.str('solution-empty') })); diff --git a/src/js/sandbox/commands.js b/src/js/sandbox/commands.js index 09e66ffd..b7dd9978 100644 --- a/src/js/sandbox/commands.js +++ b/src/js/sandbox/commands.js @@ -117,7 +117,7 @@ var regexMap = { 'level': /^level\s?([a-zA-Z0-9]*)/, 'levels': /^levels($|\s)/, 'mobileAlert': /^mobile alert($|\s)/, - 'build level': /^build +level($|\s)/, + 'build level': /^build +level\s?([a-zA-Z0-9]*)$/, 'export tree': /^export +tree$/, 'importTreeNow': /^importTreeNow($|\s)/, 'importLevelNow': /^importLevelNow($|\s)/, diff --git a/src/js/sandbox/index.js b/src/js/sandbox/index.js index b8b64e19..e484c443 100644 --- a/src/js/sandbox/index.js +++ b/src/js/sandbox/index.js @@ -194,12 +194,14 @@ var Sandbox = Backbone.View.extend({ this.clear(); var whenBuilderOpen = Q.defer(); - var LevelBuilder = require('../level/builder').LevelBuilder; - this.levelBuilder = new LevelBuilder({ - deferred: whenBuilderOpen - }); + var regexResults = command.get('regexResults') || []; + var toEdit = regexResults[1] || false; + this.levelBuilder = new LevelBuilder({ + deferred: whenBuilderOpen, + editLevel: toEdit + }); whenBuilderOpen.promise.then(function() { command.finishWith(deferred); });