mirror of
https://github.com/pcottle/learnGitBranching.git
synced 2025-06-27 08:28:50 +02:00
level scaffolding
This commit is contained in:
parent
903b537fda
commit
ca33b7ce1b
8 changed files with 305 additions and 76 deletions
293
build/bundle.js
293
build/bundle.js
|
@ -6254,6 +6254,7 @@ var events = _.clone(Backbone.Events);
|
||||||
var commandUI;
|
var commandUI;
|
||||||
var sandbox;
|
var sandbox;
|
||||||
var eventBaton;
|
var eventBaton;
|
||||||
|
var levelArbiter;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -6270,10 +6271,12 @@ var init = function() {
|
||||||
var Sandbox = require('../level/sandbox').Sandbox;
|
var Sandbox = require('../level/sandbox').Sandbox;
|
||||||
var Level = require('../level').Level;
|
var Level = require('../level').Level;
|
||||||
var EventBaton = require('../util/eventBaton').EventBaton;
|
var EventBaton = require('../util/eventBaton').EventBaton;
|
||||||
|
var LevelArbiter = require('../level/arbiter').LevelArbiter;
|
||||||
|
|
||||||
eventBaton = new EventBaton();
|
eventBaton = new EventBaton();
|
||||||
commandUI = new CommandUI();
|
commandUI = new CommandUI();
|
||||||
sandbox = new Sandbox();
|
sandbox = new Sandbox();
|
||||||
|
levelArbiter = new LevelArbiter();
|
||||||
|
|
||||||
// we always want to focus the text area to collect input
|
// we always want to focus the text area to collect input
|
||||||
var focusTextArea = function() {
|
var focusTextArea = function() {
|
||||||
|
@ -6373,6 +6376,10 @@ exports.getCommandUI = function() {
|
||||||
return commandUI;
|
return commandUI;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.getLevelArbiter = function() {
|
||||||
|
return levelArbiter;
|
||||||
|
};
|
||||||
|
|
||||||
exports.init = init;
|
exports.init = init;
|
||||||
|
|
||||||
|
|
||||||
|
@ -14978,6 +14985,160 @@ var parse = function(str) {
|
||||||
exports.parse = parse;
|
exports.parse = parse;
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
require.define("/src/js/level/arbiter.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore');
|
||||||
|
var Backbone = require('backbone');
|
||||||
|
|
||||||
|
// Each level is part of a "sequence;" levels within
|
||||||
|
// a sequence proceed in order.
|
||||||
|
var levelSequences = require('../levels').levelSequences;
|
||||||
|
var sequenceInfo = require('../levels').sequenceInfo;
|
||||||
|
|
||||||
|
function LevelArbiter() {
|
||||||
|
this.levelMap = {};
|
||||||
|
this.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
LevelArbiter.prototype.init = function() {
|
||||||
|
var previousLevelID;
|
||||||
|
_.each(levelSequences, function(levels, levelSequenceName) {
|
||||||
|
// for this particular sequence...
|
||||||
|
_.each(levels, function(level) {
|
||||||
|
this.validateLevel(level);
|
||||||
|
this.levelMap[level.id] = level;
|
||||||
|
|
||||||
|
// build up the chaining between levels
|
||||||
|
if (previousLevelID) {
|
||||||
|
this.levelMap[previousLevelID]['nextLevelID'] = level.id;
|
||||||
|
}
|
||||||
|
previousLevelID = level.id;
|
||||||
|
}, this);
|
||||||
|
}, this);
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.validateLevel = function(level) {
|
||||||
|
level = level || {};
|
||||||
|
var requiredFields = [
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'goalTreeString',
|
||||||
|
'solutionCommand'
|
||||||
|
];
|
||||||
|
|
||||||
|
var optionalFields = [
|
||||||
|
'hint',
|
||||||
|
'disabledMap'
|
||||||
|
];
|
||||||
|
|
||||||
|
_.each(requiredFields, function(field) {
|
||||||
|
if (level[field] === undefined) {
|
||||||
|
throw new Error('I need this field for a level: ' + field);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getSequences = function() {
|
||||||
|
return _.keys(levelSequences);
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getLevelsInSequence = function(sequenceName) {
|
||||||
|
if (!levelSequences[sequenceName]) {
|
||||||
|
throw new Error('that sequecne name ' + sequenceName + 'does not exist');
|
||||||
|
}
|
||||||
|
return levelSequences[sequenceName];
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getSequenceInfo = function(sequenceName) {
|
||||||
|
return sequenceInfo[sequenceName];
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getLevel = function(id) {
|
||||||
|
return this.levelMap[id];
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getNextLevel = function(id) {
|
||||||
|
if (!this.levelMap[id]) {
|
||||||
|
throw new Error('that level doesnt exist!');
|
||||||
|
}
|
||||||
|
return this.levelMap[id]['nextLevelID'];
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.LevelArbiter = LevelArbiter;
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
require.define("/src/levels/index.js",function(require,module,exports,__dirname,__filename,process,global){// Each level is part of a "sequence;" levels within
|
||||||
|
// a sequence proceed in the order listed here
|
||||||
|
exports.levelSequences = {
|
||||||
|
intro: [
|
||||||
|
require('../../levels/intro/1').level,
|
||||||
|
require('../../levels/intro/2').level
|
||||||
|
],
|
||||||
|
rebase: [
|
||||||
|
require('../../levels/rebase/1').level,
|
||||||
|
require('../../levels/rebase/2').level
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
// there are also cute names and such for sequences
|
||||||
|
exports.sequenceInfo = {
|
||||||
|
intro: {
|
||||||
|
name: 'Introduction Sequence',
|
||||||
|
about: 'A nicely paced introduction to the majority of git commands'
|
||||||
|
},
|
||||||
|
rebase: {
|
||||||
|
name: 'Master the Rebase Luke!',
|
||||||
|
about: 'What is this whole rebase hotness everyone is talking about? Find out!'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
require.define("/src/levels/intro/1.js",function(require,module,exports,__dirname,__filename,process,global){exports.level = {
|
||||||
|
id: 'intro1',
|
||||||
|
name: 'Introduction #1',
|
||||||
|
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
||||||
|
solutionCommand: 'git checkout -b win; git commit',
|
||||||
|
hint: 'Try checking out a branch named after Charlie Sheen'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
require.define("/src/levels/intro/2.js",function(require,module,exports,__dirname,__filename,process,global){exports.level = {
|
||||||
|
id: 'intro1',
|
||||||
|
name: 'Introduction #1',
|
||||||
|
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
||||||
|
solutionCommand: 'git checkout -b win; git commit',
|
||||||
|
hint: 'Try checking out a branch named after Charlie Sheen'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
require.define("/src/levels/rebase/1.js",function(require,module,exports,__dirname,__filename,process,global){exports.level = {
|
||||||
|
id: 'intro1',
|
||||||
|
name: 'Introduction #1',
|
||||||
|
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
||||||
|
solutionCommand: 'git checkout -b win; git commit',
|
||||||
|
hint: 'Try checking out a branch named after Charlie Sheen'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
require.define("/src/levels/rebase/2.js",function(require,module,exports,__dirname,__filename,process,global){exports.level = {
|
||||||
|
id: 'intro1',
|
||||||
|
name: 'Introduction #1',
|
||||||
|
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
||||||
|
solutionCommand: 'git checkout -b win; git commit',
|
||||||
|
hint: 'Try checking out a branch named after Charlie Sheen'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
require.define("/src/js/util/zoomLevel.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore');
|
require.define("/src/js/util/zoomLevel.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore');
|
||||||
|
@ -15451,46 +15612,6 @@ require.define("/src/js/util/mock.js",function(require,module,exports,__dirname,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
require.define("/src/levels/intro/1.js",function(require,module,exports,__dirname,__filename,process,global){exports = {
|
|
||||||
id: 'intro1',
|
|
||||||
name: 'Introduction #1',
|
|
||||||
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
|
||||||
solutionCommand: 'git checkout -b win; git commit',
|
|
||||||
hint: 'Try checking out a branch named after Charlie Sheen'
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
require.define("/src/levels/intro/2.js",function(require,module,exports,__dirname,__filename,process,global){exports = {
|
|
||||||
id: 'intro1',
|
|
||||||
name: 'Introduction #1',
|
|
||||||
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
|
||||||
solutionCommand: 'git checkout -b win; git commit',
|
|
||||||
hint: 'Try checking out a branch named after Charlie Sheen'
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
require.define("/src/levels/rebase/1.js",function(require,module,exports,__dirname,__filename,process,global){exports = {
|
|
||||||
id: 'intro1',
|
|
||||||
name: 'Introduction #1',
|
|
||||||
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
|
||||||
solutionCommand: 'git checkout -b win; git commit',
|
|
||||||
hint: 'Try checking out a branch named after Charlie Sheen'
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
require.define("/src/levels/rebase/2.js",function(require,module,exports,__dirname,__filename,process,global){exports = {
|
|
||||||
id: 'intro1',
|
|
||||||
name: 'Introduction #1',
|
|
||||||
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
|
||||||
solutionCommand: 'git checkout -b win; git commit',
|
|
||||||
hint: 'Try checking out a branch named after Charlie Sheen'
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
require.define("/src/js/git/headless.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore');
|
require.define("/src/js/git/headless.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore');
|
||||||
|
@ -15563,6 +15684,7 @@ var events = _.clone(Backbone.Events);
|
||||||
var commandUI;
|
var commandUI;
|
||||||
var sandbox;
|
var sandbox;
|
||||||
var eventBaton;
|
var eventBaton;
|
||||||
|
var levelArbiter;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -15579,10 +15701,12 @@ var init = function() {
|
||||||
var Sandbox = require('../level/sandbox').Sandbox;
|
var Sandbox = require('../level/sandbox').Sandbox;
|
||||||
var Level = require('../level').Level;
|
var Level = require('../level').Level;
|
||||||
var EventBaton = require('../util/eventBaton').EventBaton;
|
var EventBaton = require('../util/eventBaton').EventBaton;
|
||||||
|
var LevelArbiter = require('../level/arbiter').LevelArbiter;
|
||||||
|
|
||||||
eventBaton = new EventBaton();
|
eventBaton = new EventBaton();
|
||||||
commandUI = new CommandUI();
|
commandUI = new CommandUI();
|
||||||
sandbox = new Sandbox();
|
sandbox = new Sandbox();
|
||||||
|
levelArbiter = new LevelArbiter();
|
||||||
|
|
||||||
// we always want to focus the text area to collect input
|
// we always want to focus the text area to collect input
|
||||||
var focusTextArea = function() {
|
var focusTextArea = function() {
|
||||||
|
@ -15682,6 +15806,10 @@ exports.getCommandUI = function() {
|
||||||
return commandUI;
|
return commandUI;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.getLevelArbiter = function() {
|
||||||
|
return levelArbiter;
|
||||||
|
};
|
||||||
|
|
||||||
exports.init = init;
|
exports.init = init;
|
||||||
|
|
||||||
|
|
||||||
|
@ -17891,17 +18019,8 @@ var Backbone = require('backbone');
|
||||||
|
|
||||||
// Each level is part of a "sequence;" levels within
|
// Each level is part of a "sequence;" levels within
|
||||||
// a sequence proceed in order.
|
// a sequence proceed in order.
|
||||||
|
var levelSequences = require('../levels').levelSequences;
|
||||||
var levelSequences = {
|
var sequenceInfo = require('../levels').sequenceInfo;
|
||||||
intro: [
|
|
||||||
require('../../levels/intro/1'),
|
|
||||||
require('../../levels/intro/2')
|
|
||||||
],
|
|
||||||
rebase: [
|
|
||||||
require('../../levels/rebase/1'),
|
|
||||||
require('../../levels/rebase/2')
|
|
||||||
]
|
|
||||||
};
|
|
||||||
|
|
||||||
function LevelArbiter() {
|
function LevelArbiter() {
|
||||||
this.levelMap = {};
|
this.levelMap = {};
|
||||||
|
@ -17909,7 +18028,6 @@ function LevelArbiter() {
|
||||||
}
|
}
|
||||||
|
|
||||||
LevelArbiter.prototype.init = function() {
|
LevelArbiter.prototype.init = function() {
|
||||||
|
|
||||||
var previousLevelID;
|
var previousLevelID;
|
||||||
_.each(levelSequences, function(levels, levelSequenceName) {
|
_.each(levelSequences, function(levels, levelSequenceName) {
|
||||||
// for this particular sequence...
|
// for this particular sequence...
|
||||||
|
@ -17931,7 +18049,7 @@ LevelArbiter.prototype.validateLevel = function(level) {
|
||||||
var requiredFields = [
|
var requiredFields = [
|
||||||
'id',
|
'id',
|
||||||
'name',
|
'name',
|
||||||
'goalTree',
|
'goalTreeString',
|
||||||
'solutionCommand'
|
'solutionCommand'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -17944,7 +18062,33 @@ LevelArbiter.prototype.validateLevel = function(level) {
|
||||||
if (level[field] === undefined) {
|
if (level[field] === undefined) {
|
||||||
throw new Error('I need this field for a level: ' + field);
|
throw new Error('I need this field for a level: ' + field);
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getSequences = function() {
|
||||||
|
return _.keys(levelSequences);
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getLevelsInSequence = function(sequenceName) {
|
||||||
|
if (!levelSequences[sequenceName]) {
|
||||||
|
throw new Error('that sequecne name ' + sequenceName + 'does not exist');
|
||||||
|
}
|
||||||
|
return levelSequences[sequenceName];
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getSequenceInfo = function(sequenceName) {
|
||||||
|
return sequenceInfo[sequenceName];
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getLevel = function(id) {
|
||||||
|
return this.levelMap[id];
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getNextLevel = function(id) {
|
||||||
|
if (!this.levelMap[id]) {
|
||||||
|
throw new Error('that level doesnt exist!');
|
||||||
|
}
|
||||||
|
return this.levelMap[id]['nextLevelID'];
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.LevelArbiter = LevelArbiter;
|
exports.LevelArbiter = LevelArbiter;
|
||||||
|
@ -23097,7 +23241,36 @@ exports.Visualization = Visualization;
|
||||||
});
|
});
|
||||||
require("/src/js/visuals/visualization.js");
|
require("/src/js/visuals/visualization.js");
|
||||||
|
|
||||||
require.define("/src/levels/intro/1.js",function(require,module,exports,__dirname,__filename,process,global){exports = {
|
require.define("/src/levels/index.js",function(require,module,exports,__dirname,__filename,process,global){// Each level is part of a "sequence;" levels within
|
||||||
|
// a sequence proceed in the order listed here
|
||||||
|
exports.levelSequences = {
|
||||||
|
intro: [
|
||||||
|
require('../../levels/intro/1').level,
|
||||||
|
require('../../levels/intro/2').level
|
||||||
|
],
|
||||||
|
rebase: [
|
||||||
|
require('../../levels/rebase/1').level,
|
||||||
|
require('../../levels/rebase/2').level
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
// there are also cute names and such for sequences
|
||||||
|
exports.sequenceInfo = {
|
||||||
|
intro: {
|
||||||
|
name: 'Introduction Sequence',
|
||||||
|
about: 'A nicely paced introduction to the majority of git commands'
|
||||||
|
},
|
||||||
|
rebase: {
|
||||||
|
name: 'Master the Rebase Luke!',
|
||||||
|
about: 'What is this whole rebase hotness everyone is talking about? Find out!'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
require("/src/levels/index.js");
|
||||||
|
|
||||||
|
require.define("/src/levels/intro/1.js",function(require,module,exports,__dirname,__filename,process,global){exports.level = {
|
||||||
id: 'intro1',
|
id: 'intro1',
|
||||||
name: 'Introduction #1',
|
name: 'Introduction #1',
|
||||||
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
||||||
|
@ -23105,10 +23278,11 @@ require.define("/src/levels/intro/1.js",function(require,module,exports,__dirnam
|
||||||
hint: 'Try checking out a branch named after Charlie Sheen'
|
hint: 'Try checking out a branch named after Charlie Sheen'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
require("/src/levels/intro/1.js");
|
require("/src/levels/intro/1.js");
|
||||||
|
|
||||||
require.define("/src/levels/intro/2.js",function(require,module,exports,__dirname,__filename,process,global){exports = {
|
require.define("/src/levels/intro/2.js",function(require,module,exports,__dirname,__filename,process,global){exports.level = {
|
||||||
id: 'intro1',
|
id: 'intro1',
|
||||||
name: 'Introduction #1',
|
name: 'Introduction #1',
|
||||||
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
||||||
|
@ -23116,10 +23290,11 @@ require.define("/src/levels/intro/2.js",function(require,module,exports,__dirnam
|
||||||
hint: 'Try checking out a branch named after Charlie Sheen'
|
hint: 'Try checking out a branch named after Charlie Sheen'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
require("/src/levels/intro/2.js");
|
require("/src/levels/intro/2.js");
|
||||||
|
|
||||||
require.define("/src/levels/rebase/1.js",function(require,module,exports,__dirname,__filename,process,global){exports = {
|
require.define("/src/levels/rebase/1.js",function(require,module,exports,__dirname,__filename,process,global){exports.level = {
|
||||||
id: 'intro1',
|
id: 'intro1',
|
||||||
name: 'Introduction #1',
|
name: 'Introduction #1',
|
||||||
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
||||||
|
@ -23127,10 +23302,11 @@ require.define("/src/levels/rebase/1.js",function(require,module,exports,__dirna
|
||||||
hint: 'Try checking out a branch named after Charlie Sheen'
|
hint: 'Try checking out a branch named after Charlie Sheen'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
require("/src/levels/rebase/1.js");
|
require("/src/levels/rebase/1.js");
|
||||||
|
|
||||||
require.define("/src/levels/rebase/2.js",function(require,module,exports,__dirname,__filename,process,global){exports = {
|
require.define("/src/levels/rebase/2.js",function(require,module,exports,__dirname,__filename,process,global){exports.level = {
|
||||||
id: 'intro1',
|
id: 'intro1',
|
||||||
name: 'Introduction #1',
|
name: 'Introduction #1',
|
||||||
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
||||||
|
@ -23138,6 +23314,7 @@ require.define("/src/levels/rebase/2.js",function(require,module,exports,__dirna
|
||||||
hint: 'Try checking out a branch named after Charlie Sheen'
|
hint: 'Try checking out a branch named after Charlie Sheen'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
require("/src/levels/rebase/2.js");
|
require("/src/levels/rebase/2.js");
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ var events = _.clone(Backbone.Events);
|
||||||
var commandUI;
|
var commandUI;
|
||||||
var sandbox;
|
var sandbox;
|
||||||
var eventBaton;
|
var eventBaton;
|
||||||
|
var levelArbiter;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -27,10 +28,12 @@ var init = function() {
|
||||||
var Sandbox = require('../level/sandbox').Sandbox;
|
var Sandbox = require('../level/sandbox').Sandbox;
|
||||||
var Level = require('../level').Level;
|
var Level = require('../level').Level;
|
||||||
var EventBaton = require('../util/eventBaton').EventBaton;
|
var EventBaton = require('../util/eventBaton').EventBaton;
|
||||||
|
var LevelArbiter = require('../level/arbiter').LevelArbiter;
|
||||||
|
|
||||||
eventBaton = new EventBaton();
|
eventBaton = new EventBaton();
|
||||||
commandUI = new CommandUI();
|
commandUI = new CommandUI();
|
||||||
sandbox = new Sandbox();
|
sandbox = new Sandbox();
|
||||||
|
levelArbiter = new LevelArbiter();
|
||||||
|
|
||||||
// we always want to focus the text area to collect input
|
// we always want to focus the text area to collect input
|
||||||
var focusTextArea = function() {
|
var focusTextArea = function() {
|
||||||
|
@ -130,5 +133,9 @@ exports.getCommandUI = function() {
|
||||||
return commandUI;
|
return commandUI;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.getLevelArbiter = function() {
|
||||||
|
return levelArbiter;
|
||||||
|
};
|
||||||
|
|
||||||
exports.init = init;
|
exports.init = init;
|
||||||
|
|
||||||
|
|
|
@ -3,17 +3,8 @@ var Backbone = require('backbone');
|
||||||
|
|
||||||
// Each level is part of a "sequence;" levels within
|
// Each level is part of a "sequence;" levels within
|
||||||
// a sequence proceed in order.
|
// a sequence proceed in order.
|
||||||
|
var levelSequences = require('../levels').levelSequences;
|
||||||
var levelSequences = {
|
var sequenceInfo = require('../levels').sequenceInfo;
|
||||||
intro: [
|
|
||||||
require('../../levels/intro/1'),
|
|
||||||
require('../../levels/intro/2')
|
|
||||||
],
|
|
||||||
rebase: [
|
|
||||||
require('../../levels/rebase/1'),
|
|
||||||
require('../../levels/rebase/2')
|
|
||||||
]
|
|
||||||
};
|
|
||||||
|
|
||||||
function LevelArbiter() {
|
function LevelArbiter() {
|
||||||
this.levelMap = {};
|
this.levelMap = {};
|
||||||
|
@ -21,7 +12,6 @@ function LevelArbiter() {
|
||||||
}
|
}
|
||||||
|
|
||||||
LevelArbiter.prototype.init = function() {
|
LevelArbiter.prototype.init = function() {
|
||||||
|
|
||||||
var previousLevelID;
|
var previousLevelID;
|
||||||
_.each(levelSequences, function(levels, levelSequenceName) {
|
_.each(levelSequences, function(levels, levelSequenceName) {
|
||||||
// for this particular sequence...
|
// for this particular sequence...
|
||||||
|
@ -43,7 +33,7 @@ LevelArbiter.prototype.validateLevel = function(level) {
|
||||||
var requiredFields = [
|
var requiredFields = [
|
||||||
'id',
|
'id',
|
||||||
'name',
|
'name',
|
||||||
'goalTree',
|
'goalTreeString',
|
||||||
'solutionCommand'
|
'solutionCommand'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -56,7 +46,33 @@ LevelArbiter.prototype.validateLevel = function(level) {
|
||||||
if (level[field] === undefined) {
|
if (level[field] === undefined) {
|
||||||
throw new Error('I need this field for a level: ' + field);
|
throw new Error('I need this field for a level: ' + field);
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getSequences = function() {
|
||||||
|
return _.keys(levelSequences);
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getLevelsInSequence = function(sequenceName) {
|
||||||
|
if (!levelSequences[sequenceName]) {
|
||||||
|
throw new Error('that sequecne name ' + sequenceName + 'does not exist');
|
||||||
|
}
|
||||||
|
return levelSequences[sequenceName];
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getSequenceInfo = function(sequenceName) {
|
||||||
|
return sequenceInfo[sequenceName];
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getLevel = function(id) {
|
||||||
|
return this.levelMap[id];
|
||||||
|
};
|
||||||
|
|
||||||
|
LevelArbiter.prototype.getNextLevel = function(id) {
|
||||||
|
if (!this.levelMap[id]) {
|
||||||
|
throw new Error('that level doesnt exist!');
|
||||||
|
}
|
||||||
|
return this.levelMap[id]['nextLevelID'];
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.LevelArbiter = LevelArbiter;
|
exports.LevelArbiter = LevelArbiter;
|
||||||
|
|
25
src/levels/index.js
Normal file
25
src/levels/index.js
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
// Each level is part of a "sequence;" levels within
|
||||||
|
// a sequence proceed in the order listed here
|
||||||
|
exports.levelSequences = {
|
||||||
|
intro: [
|
||||||
|
require('../../levels/intro/1').level,
|
||||||
|
require('../../levels/intro/2').level
|
||||||
|
],
|
||||||
|
rebase: [
|
||||||
|
require('../../levels/rebase/1').level,
|
||||||
|
require('../../levels/rebase/2').level
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
// there are also cute names and such for sequences
|
||||||
|
exports.sequenceInfo = {
|
||||||
|
intro: {
|
||||||
|
name: 'Introduction Sequence',
|
||||||
|
about: 'A nicely paced introduction to the majority of git commands'
|
||||||
|
},
|
||||||
|
rebase: {
|
||||||
|
name: 'Master the Rebase Luke!',
|
||||||
|
about: 'What is this whole rebase hotness everyone is talking about? Find out!'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
exports = {
|
exports.level = {
|
||||||
id: 'intro1',
|
id: 'intro1',
|
||||||
name: 'Introduction #1',
|
name: 'Introduction #1',
|
||||||
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
||||||
solutionCommand: 'git checkout -b win; git commit',
|
solutionCommand: 'git checkout -b win; git commit',
|
||||||
hint: 'Try checking out a branch named after Charlie Sheen'
|
hint: 'Try checking out a branch named after Charlie Sheen'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
exports = {
|
exports.level = {
|
||||||
id: 'intro1',
|
id: 'intro1',
|
||||||
name: 'Introduction #1',
|
name: 'Introduction #1',
|
||||||
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
||||||
solutionCommand: 'git checkout -b win; git commit',
|
solutionCommand: 'git checkout -b win; git commit',
|
||||||
hint: 'Try checking out a branch named after Charlie Sheen'
|
hint: 'Try checking out a branch named after Charlie Sheen'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
exports = {
|
exports.level = {
|
||||||
id: 'intro1',
|
id: 'intro1',
|
||||||
name: 'Introduction #1',
|
name: 'Introduction #1',
|
||||||
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
||||||
solutionCommand: 'git checkout -b win; git commit',
|
solutionCommand: 'git checkout -b win; git commit',
|
||||||
hint: 'Try checking out a branch named after Charlie Sheen'
|
hint: 'Try checking out a branch named after Charlie Sheen'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
exports = {
|
exports.level = {
|
||||||
id: 'intro1',
|
id: 'intro1',
|
||||||
name: 'Introduction #1',
|
name: 'Introduction #1',
|
||||||
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
goalTreeString: '{"branches":{"master":{"target":"C1","id":"master"},"win":{"target":"C2","id":"win"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"win","id":"HEAD"}}',
|
||||||
solutionCommand: 'git checkout -b win; git commit',
|
solutionCommand: 'git checkout -b win; git commit',
|
||||||
hint: 'Try checking out a branch named after Charlie Sheen'
|
hint: 'Try checking out a branch named after Charlie Sheen'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue