diff --git a/build/bundle.js b/build/bundle.js index 67eb78fc..7ffc77c5 100644 --- a/build/bundle.js +++ b/build/bundle.js @@ -4466,6 +4466,28 @@ exports.splitTextCommand = function(value, func, context) { }); }; +exports.genParseCommand = function(regexMap, eventName) { + return function(str) { + var method; + var regexResults; + + _.each(regexMap, function(regex, _method) { + var results = regex.exec(str); + if (results) { + method = _method; + regexResults = results; + } + }); + + return (!method) ? false : { + toSet: { + eventName: eventName, + method: method, + regexResults: regexResults + } + }; + }; +}; }); @@ -6491,6 +6513,14 @@ var LevelToolbar = require('../views').LevelToolbar; var TreeCompare = require('../git/treeCompare').TreeCompare; +var regexMap = { + 'show goal': /^show goal$/, + 'hide goal': /^hide goal$/, + 'show solution': /^show solution$/ +}; + +var parse = util.genParseCommand(regexMap, 'processLevelCommand'); + var Level = Sandbox.extend({ initialize: function(options) { options = options || {}; @@ -6653,7 +6683,7 @@ var Level = Sandbox.extend({ // add our specific functionaity this.parseWaterfall.addFirst( 'parseWaterfall', - require('../level/commands').parse + parse ); this.parseWaterfall.addFirst( @@ -6802,22 +6832,13 @@ var Level = Sandbox.extend({ this.level.hint : "Hmm, there doesn't seem to be a hint for this level :-/"; - var instants = [ + return [ [/^hint$/, function() { throw new Errors.CommandResult({ msg: hintMsg }); }] ]; - - if (!this.solutionCommand) { - instants.push([/^show solution$/, function() { - throw new Errors.CommandResult({ - msg: 'No solution provided for this level :-/' - }); - }]); - } - return instants; }, reset: function() { @@ -12854,6 +12875,7 @@ exports.ParseWaterfall = ParseWaterfall; }); require.define("/src/js/level/SandboxCommands.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore'); +var util = require('../util'); var Errors = require('../util/errors'); var CommandProcessError = Errors.CommandProcessError; @@ -12910,29 +12932,8 @@ var regexMap = { 'iosAlert': /^iOS alert($|\s)/ }; -var parse = function(str) { - var sandboxMethod; - var regexResults; - - _.each(regexMap, function(regex, method) { - var results = regex.exec(str); - if (results) { - sandboxMethod = method; - regexResults = results; - } - }); - - return (!sandboxMethod) ? false : { - toSet: { - eventName: 'processSandboxCommand', - method: sandboxMethod, - regexResults: regexResults - } - }; -}; - exports.instantCommands = instantCommands; -exports.parse = parse; +exports.parse = util.genParseCommand(regexMap, 'processSandboxCommand'); }); @@ -15481,36 +15482,6 @@ var GitDemonstrationView = ContainedBase.extend({ exports.GitDemonstrationView = GitDemonstrationView; -}); - -require.define("/src/js/level/commands.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore'); - -var regexMap = { - 'show goal': /^show goal$/, - 'hide goal': /^hide goal$/, - 'show solution': /^show solution$/ -}; - -var parse = function(str) { - var levelMethod; - - _.each(regexMap, function(regex, method) { - if (regex.test(str)) { - levelMethod = method; - } - }); - - return (!levelMethod) ? false : { - toSet: { - eventName: 'processLevelCommand', - method: levelMethod - } - }; -}; - -exports.parse = parse; - - }); require.define("/src/js/level/arbiter.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore'); @@ -19119,6 +19090,14 @@ var ConfirmCancelTerminal = require('../views').ConfirmCancelTerminal; var NextLevelConfirm = require('../views').NextLevelConfirm; var LevelToolbar = require('../views').LevelToolbar; +var regexMap = { + 'define goal': /^define goal$/, + 'define start': /^define start$/, + 'show start': /^show start$/ +}; + +var parse = util.genParseCommand(regexMap, 'processLevelBuilderCommand'); + var LevelBuilder = Level.extend({ initialize: function(options) { options = options || {}; @@ -19146,6 +19125,8 @@ var LevelBuilder = Level.extend({ LevelBuilder.__super__.initialize.apply(this, [options]); + this.initStartVisualization(); + // we wont be using this stuff, and its to delete to ensure we overwrite all functions that // include that functionality delete this.treeCompare; @@ -19158,11 +19139,28 @@ var LevelBuilder = Level.extend({ }); }, - initGoalData: function(options) { + 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'; - LevelBuilder.__super__.initGoalData.apply(this, [options]); + LevelBuilder.__super__.initGoalData.apply(this, arguments); + }, + + initStartVisualization: function() { + this.startCanvasHolder = new CanvasTerminalHolder(); + + this.startVis = new Visualization({ + el: this.startCanvasHolder.getCanvasLocation(), + containerElement: this.startCanvasHolder.getCanvasLocation(), + treeString: this.level.startTree, + noKeyboardInput: true, + noClick: true + }); + }, + + startDie: function() { + this.startCanvasHolder.die(); + this.startVis.die(); }, startOffCommand: function() { @@ -19172,8 +19170,21 @@ var LevelBuilder = Level.extend({ ); }, - initParseWaterfall: function() { + initParseWaterfall: function(options) { LevelBuilder.__super__.initParseWaterfall.apply(this, [options]); + + this.parseWaterfall.addFirst( + 'parseWaterfall', + parse + ); + this.parseWaterfall.addFirst( + 'instantWaterfall', + this.getInstantCommands() + ); + }, + + getInstantCommands: function() { + return []; }, takeControl: function() { @@ -19183,9 +19194,23 @@ var LevelBuilder = Level.extend({ }, releaseControl: function() { - Main.getEventBaton().releaseBaton('processLevelBuilderCommand', this.processLevelCommand, this); + Main.getEventBaton().releaseBaton('processLevelBuilderCommand', this.processLevelBuilderCommand, this); LevelBuilder.__super__.releaseControl.apply(this); + }, + + afterCommandDefer: function(defer, command) { + // we dont need to compare against the goal anymore + defer.resolve(); + }, + + die: function() { + this.startDie(); + + LevelBuilder.__super__.die.apply(this, arguments); + + delete this.startVis; + delete this.startCanvasHolder; } }); @@ -19194,37 +19219,6 @@ exports.LevelBuilder = LevelBuilder; }); require("/src/js/level/builder.js"); -require.define("/src/js/level/commands.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore'); - -var regexMap = { - 'show goal': /^show goal$/, - 'hide goal': /^hide goal$/, - 'show solution': /^show solution$/ -}; - -var parse = function(str) { - var levelMethod; - - _.each(regexMap, function(regex, method) { - if (regex.test(str)) { - levelMethod = method; - } - }); - - return (!levelMethod) ? false : { - toSet: { - eventName: 'processLevelCommand', - method: levelMethod - } - }; -}; - -exports.parse = parse; - - -}); -require("/src/js/level/commands.js"); - require.define("/src/js/level/disabledMap.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore'); var GitCommands = require('../git/commands'); @@ -19292,6 +19286,14 @@ var LevelToolbar = require('../views').LevelToolbar; var TreeCompare = require('../git/treeCompare').TreeCompare; +var regexMap = { + 'show goal': /^show goal$/, + 'hide goal': /^hide goal$/, + 'show solution': /^show solution$/ +}; + +var parse = util.genParseCommand(regexMap, 'processLevelCommand'); + var Level = Sandbox.extend({ initialize: function(options) { options = options || {}; @@ -19454,7 +19456,7 @@ var Level = Sandbox.extend({ // add our specific functionaity this.parseWaterfall.addFirst( 'parseWaterfall', - require('../level/commands').parse + parse ); this.parseWaterfall.addFirst( @@ -19603,22 +19605,13 @@ var Level = Sandbox.extend({ this.level.hint : "Hmm, there doesn't seem to be a hint for this level :-/"; - var instants = [ + return [ [/^hint$/, function() { throw new Errors.CommandResult({ msg: hintMsg }); }] ]; - - if (!this.solutionCommand) { - instants.push([/^show solution$/, function() { - throw new Errors.CommandResult({ - msg: 'No solution provided for this level :-/' - }); - }]); - } - return instants; }, reset: function() { @@ -20017,6 +20010,7 @@ exports.Sandbox = Sandbox; require("/src/js/level/sandbox.js"); require.define("/src/js/level/sandboxCommands.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore'); +var util = require('../util'); var Errors = require('../util/errors'); var CommandProcessError = Errors.CommandProcessError; @@ -20073,29 +20067,8 @@ var regexMap = { 'iosAlert': /^iOS alert($|\s)/ }; -var parse = function(str) { - var sandboxMethod; - var regexResults; - - _.each(regexMap, function(regex, method) { - var results = regex.exec(str); - if (results) { - sandboxMethod = method; - regexResults = results; - } - }); - - return (!sandboxMethod) ? false : { - toSet: { - eventName: 'processSandboxCommand', - method: sandboxMethod, - regexResults: regexResults - } - }; -}; - exports.instantCommands = instantCommands; -exports.parse = parse; +exports.parse = util.genParseCommand(regexMap, 'processSandboxCommand'); }); @@ -20700,6 +20673,28 @@ exports.splitTextCommand = function(value, func, context) { }); }; +exports.genParseCommand = function(regexMap, eventName) { + return function(str) { + var method; + var regexResults; + + _.each(regexMap, function(regex, _method) { + var results = regex.exec(str); + if (results) { + method = _method; + regexResults = results; + } + }); + + return (!method) ? false : { + toSet: { + eventName: eventName, + method: method, + regexResults: regexResults + } + }; + }; +}; }); require("/src/js/util/index.js"); diff --git a/src/js/level/builder.js b/src/js/level/builder.js index f5bf8b37..17e60076 100644 --- a/src/js/level/builder.js +++ b/src/js/level/builder.js @@ -19,11 +19,13 @@ var NextLevelConfirm = require('../views').NextLevelConfirm; var LevelToolbar = require('../views').LevelToolbar; var regexMap = { - 'show goal': /^show goal$/, - 'hide goal': /^hide goal$/, - 'show solution': /^show solution$/ + 'define goal': /^define goal$/, + 'define start': /^define start$/, + 'show start': /^show start$/ }; +var parse = util.genParseCommand(regexMap, 'processLevelBuilderCommand'); + var LevelBuilder = Level.extend({ initialize: function(options) { options = options || {}; @@ -51,6 +53,8 @@ var LevelBuilder = Level.extend({ LevelBuilder.__super__.initialize.apply(this, [options]); + this.initStartVisualization(); + // we wont be using this stuff, and its to delete to ensure we overwrite all functions that // include that functionality delete this.treeCompare; @@ -63,11 +67,28 @@ var LevelBuilder = Level.extend({ }); }, - initGoalData: function(options) { + 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'; - LevelBuilder.__super__.initGoalData.apply(this, [options]); + LevelBuilder.__super__.initGoalData.apply(this, arguments); + }, + + initStartVisualization: function() { + this.startCanvasHolder = new CanvasTerminalHolder(); + + this.startVis = new Visualization({ + el: this.startCanvasHolder.getCanvasLocation(), + containerElement: this.startCanvasHolder.getCanvasLocation(), + treeString: this.level.startTree, + noKeyboardInput: true, + noClick: true + }); + }, + + startDie: function() { + this.startCanvasHolder.die(); + this.startVis.die(); }, startOffCommand: function() { @@ -77,7 +98,7 @@ var LevelBuilder = Level.extend({ ); }, - initParseWaterfall: function() { + initParseWaterfall: function(options) { LevelBuilder.__super__.initParseWaterfall.apply(this, [options]); this.parseWaterfall.addFirst( @@ -90,6 +111,10 @@ var LevelBuilder = Level.extend({ ); }, + getInstantCommands: function() { + return []; + }, + takeControl: function() { Main.getEventBaton().stealBaton('processLevelBuilderCommand', this.processLevelCommand, this); @@ -97,9 +122,23 @@ var LevelBuilder = Level.extend({ }, releaseControl: function() { - Main.getEventBaton().releaseBaton('processLevelBuilderCommand', this.processLevelCommand, this); + Main.getEventBaton().releaseBaton('processLevelBuilderCommand', this.processLevelBuilderCommand, this); LevelBuilder.__super__.releaseControl.apply(this); + }, + + afterCommandDefer: function(defer, command) { + // we dont need to compare against the goal anymore + defer.resolve(); + }, + + die: function() { + this.startDie(); + + LevelBuilder.__super__.die.apply(this, arguments); + + delete this.startVis; + delete this.startCanvasHolder; } }); diff --git a/src/js/level/index.js b/src/js/level/index.js index d1ee8761..12091fa2 100644 --- a/src/js/level/index.js +++ b/src/js/level/index.js @@ -341,22 +341,13 @@ var Level = Sandbox.extend({ this.level.hint : "Hmm, there doesn't seem to be a hint for this level :-/"; - var instants = [ + return [ [/^hint$/, function() { throw new Errors.CommandResult({ msg: hintMsg }); }] ]; - - if (!this.solutionCommand) { - instants.push([/^show solution$/, function() { - throw new Errors.CommandResult({ - msg: 'No solution provided for this level :-/' - }); - }]); - } - return instants; }, reset: function() { diff --git a/src/js/level/sandboxCommands.js b/src/js/level/sandboxCommands.js index f1fed6da..dca45068 100644 --- a/src/js/level/sandboxCommands.js +++ b/src/js/level/sandboxCommands.js @@ -1,4 +1,5 @@ var _ = require('underscore'); +var util = require('../util'); var Errors = require('../util/errors'); var CommandProcessError = Errors.CommandProcessError; diff --git a/src/js/util/index.js b/src/js/util/index.js index d9b2abc3..8a20a944 100644 --- a/src/js/util/index.js +++ b/src/js/util/index.js @@ -22,20 +22,24 @@ exports.splitTextCommand = function(value, func, context) { }); }; -util.genParseCommand = function(regexMap, eventName) { +exports.genParseCommand = function(regexMap, eventName) { return function(str) { var method; + var regexResults; _.each(regexMap, function(regex, _method) { - if (regex.test(str)) { + var results = regex.exec(str); + if (results) { method = _method; + regexResults = results; } }); return (!method) ? false : { toSet: { - eventName: 'processLevelBuilderCommand', - method: method + eventName: eventName, + method: method, + regexResults: regexResults } }; };