mirror of
https://github.com/pcottle/learnGitBranching.git
synced 2025-06-27 16:38:50 +02:00
no more ids on levels, its generated automatically, and index utilization
This commit is contained in:
parent
a1a6820d77
commit
d406317788
10 changed files with 59 additions and 66 deletions
|
@ -15603,7 +15603,8 @@ LevelArbiter.prototype.validateLevel = function(level) {
|
||||||
|
|
||||||
var optionalFields = [
|
var optionalFields = [
|
||||||
'hint',
|
'hint',
|
||||||
'disabledMap'
|
'disabledMap',
|
||||||
|
'startTree'
|
||||||
];
|
];
|
||||||
|
|
||||||
_.each(requiredFields, function(field) {
|
_.each(requiredFields, function(field) {
|
||||||
|
@ -16499,6 +16500,7 @@ var Q = require('q');
|
||||||
|
|
||||||
var util = require('../util');
|
var util = require('../util');
|
||||||
var Main = require('../app');
|
var Main = require('../app');
|
||||||
|
var Errors = require('../util/errors');
|
||||||
|
|
||||||
var Visualization = require('../visuals/visualization').Visualization;
|
var Visualization = require('../visuals/visualization').Visualization;
|
||||||
var ParseWaterfall = require('../level/parseWaterfall').ParseWaterfall;
|
var ParseWaterfall = require('../level/parseWaterfall').ParseWaterfall;
|
||||||
|
@ -16526,11 +16528,9 @@ var parse = util.genParseCommand(regexMap, 'processLevelBuilderCommand');
|
||||||
var LevelBuilder = Level.extend({
|
var LevelBuilder = Level.extend({
|
||||||
initialize: function(options) {
|
initialize: function(options) {
|
||||||
options = options || {};
|
options = options || {};
|
||||||
|
options.level = options.level || {};
|
||||||
|
|
||||||
this.options = options;
|
options.level.startDialog = {
|
||||||
this.level = {};
|
|
||||||
|
|
||||||
this.level.startDialog = {
|
|
||||||
childViews: [{
|
childViews: [{
|
||||||
type: 'ModalAlert',
|
type: 'ModalAlert',
|
||||||
options: {
|
options: {
|
||||||
|
@ -16539,10 +16539,10 @@ var LevelBuilder = Level.extend({
|
||||||
'',
|
'',
|
||||||
'Here are the main steps:',
|
'Here are the main steps:',
|
||||||
'',
|
'',
|
||||||
' * Define the starting tree',
|
' * Define the starting tree with ```define start```',
|
||||||
' * Enter the series of git commands that compose of the (optimal) solution',
|
' * Enter the series of git commands that compose the (optimal) solution',
|
||||||
' * Define the goal tree, which also defines the solution',
|
' * Define the goal tree with ```define goal```. Defining the goal also defines the solution',
|
||||||
' * Enter the command ```finish building``` to specify start dialogs and such'
|
' * Enter the command ```finish``` to output your level JSON!'
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
|
@ -16709,13 +16709,20 @@ var LevelBuilder = Level.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
finish: function(command, deferred) {
|
finish: function(command, deferred) {
|
||||||
if (!this.level.id) {
|
if (!this.gitCommandsIssued.length) {
|
||||||
this.setID();
|
command.set('error', new Errors.GitError({
|
||||||
|
msg: 'Your solution is empty!'
|
||||||
|
}));
|
||||||
|
deferred.resolve();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.level.hint === undefined) {
|
if (this.level.hint === undefined) {
|
||||||
this.setHint();
|
this.setHint();
|
||||||
}
|
}
|
||||||
console.log(this.level, this.startTree);
|
console.log(this.level);
|
||||||
|
|
||||||
|
command.finishWith(deferred);
|
||||||
},
|
},
|
||||||
|
|
||||||
processLevelBuilderCommand: function(command, deferred) {
|
processLevelBuilderCommand: function(command, deferred) {
|
||||||
|
@ -19313,7 +19320,8 @@ LevelArbiter.prototype.validateLevel = function(level) {
|
||||||
|
|
||||||
var optionalFields = [
|
var optionalFields = [
|
||||||
'hint',
|
'hint',
|
||||||
'disabledMap'
|
'disabledMap',
|
||||||
|
'startTree'
|
||||||
];
|
];
|
||||||
|
|
||||||
_.each(requiredFields, function(field) {
|
_.each(requiredFields, function(field) {
|
||||||
|
@ -19373,6 +19381,7 @@ var Q = require('q');
|
||||||
|
|
||||||
var util = require('../util');
|
var util = require('../util');
|
||||||
var Main = require('../app');
|
var Main = require('../app');
|
||||||
|
var Errors = require('../util/errors');
|
||||||
|
|
||||||
var Visualization = require('../visuals/visualization').Visualization;
|
var Visualization = require('../visuals/visualization').Visualization;
|
||||||
var ParseWaterfall = require('../level/parseWaterfall').ParseWaterfall;
|
var ParseWaterfall = require('../level/parseWaterfall').ParseWaterfall;
|
||||||
|
@ -19400,11 +19409,9 @@ var parse = util.genParseCommand(regexMap, 'processLevelBuilderCommand');
|
||||||
var LevelBuilder = Level.extend({
|
var LevelBuilder = Level.extend({
|
||||||
initialize: function(options) {
|
initialize: function(options) {
|
||||||
options = options || {};
|
options = options || {};
|
||||||
|
options.level = options.level || {};
|
||||||
|
|
||||||
this.options = options;
|
options.level.startDialog = {
|
||||||
this.level = {};
|
|
||||||
|
|
||||||
this.level.startDialog = {
|
|
||||||
childViews: [{
|
childViews: [{
|
||||||
type: 'ModalAlert',
|
type: 'ModalAlert',
|
||||||
options: {
|
options: {
|
||||||
|
@ -19413,10 +19420,10 @@ var LevelBuilder = Level.extend({
|
||||||
'',
|
'',
|
||||||
'Here are the main steps:',
|
'Here are the main steps:',
|
||||||
'',
|
'',
|
||||||
' * Define the starting tree',
|
' * Define the starting tree with ```define start```',
|
||||||
' * Enter the series of git commands that compose of the (optimal) solution',
|
' * Enter the series of git commands that compose the (optimal) solution',
|
||||||
' * Define the goal tree, which also defines the solution',
|
' * Define the goal tree with ```define goal```. Defining the goal also defines the solution',
|
||||||
' * Enter the command ```finish building``` to specify start dialogs and such'
|
' * Enter the command ```finish``` to output your level JSON!'
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
|
@ -19583,13 +19590,20 @@ var LevelBuilder = Level.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
finish: function(command, deferred) {
|
finish: function(command, deferred) {
|
||||||
if (!this.level.id) {
|
if (!this.gitCommandsIssued.length) {
|
||||||
this.setID();
|
command.set('error', new Errors.GitError({
|
||||||
|
msg: 'Your solution is empty!'
|
||||||
|
}));
|
||||||
|
deferred.resolve();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.level.hint === undefined) {
|
if (this.level.hint === undefined) {
|
||||||
this.setHint();
|
this.setHint();
|
||||||
}
|
}
|
||||||
console.log(this.level, this.startTree);
|
console.log(this.level);
|
||||||
|
|
||||||
|
command.finishWith(deferred);
|
||||||
},
|
},
|
||||||
|
|
||||||
processLevelBuilderCommand: function(command, deferred) {
|
processLevelBuilderCommand: function(command, deferred) {
|
||||||
|
|
|
@ -32,8 +32,11 @@ LevelArbiter.prototype.init = function() {
|
||||||
this.validateLevel(level);
|
this.validateLevel(level);
|
||||||
this.levelMap[level.id] = _.extend(
|
this.levelMap[level.id] = _.extend(
|
||||||
{},
|
{},
|
||||||
{ index: index },
|
level,
|
||||||
level
|
{
|
||||||
|
index: index,
|
||||||
|
id: levelSequenceName + String(index)
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// build up the chaining between levels
|
// build up the chaining between levels
|
||||||
|
@ -68,7 +71,6 @@ LevelArbiter.prototype.syncToStorage = function() {
|
||||||
LevelArbiter.prototype.validateLevel = function(level) {
|
LevelArbiter.prototype.validateLevel = function(level) {
|
||||||
level = level || {};
|
level = level || {};
|
||||||
var requiredFields = [
|
var requiredFields = [
|
||||||
'id',
|
|
||||||
'name',
|
'name',
|
||||||
'goalTreeString',
|
'goalTreeString',
|
||||||
'solutionCommand'
|
'solutionCommand'
|
||||||
|
|
|
@ -4,6 +4,7 @@ var Q = require('q');
|
||||||
|
|
||||||
var util = require('../util');
|
var util = require('../util');
|
||||||
var Main = require('../app');
|
var Main = require('../app');
|
||||||
|
var Errors = require('../util/errors');
|
||||||
|
|
||||||
var Visualization = require('../visuals/visualization').Visualization;
|
var Visualization = require('../visuals/visualization').Visualization;
|
||||||
var ParseWaterfall = require('../level/parseWaterfall').ParseWaterfall;
|
var ParseWaterfall = require('../level/parseWaterfall').ParseWaterfall;
|
||||||
|
@ -23,6 +24,7 @@ var regexMap = {
|
||||||
'define start': /^define start$/,
|
'define start': /^define start$/,
|
||||||
'show start': /^show start$/,
|
'show start': /^show start$/,
|
||||||
'hide start': /^hide start$/,
|
'hide start': /^hide start$/,
|
||||||
|
'define hint': /^define hint$/,
|
||||||
'finish': /^finish$/
|
'finish': /^finish$/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -31,11 +33,9 @@ var parse = util.genParseCommand(regexMap, 'processLevelBuilderCommand');
|
||||||
var LevelBuilder = Level.extend({
|
var LevelBuilder = Level.extend({
|
||||||
initialize: function(options) {
|
initialize: function(options) {
|
||||||
options = options || {};
|
options = options || {};
|
||||||
|
options.level = options.level || {};
|
||||||
|
|
||||||
this.options = options;
|
options.level.startDialog = {
|
||||||
this.level = {};
|
|
||||||
|
|
||||||
this.level.startDialog = {
|
|
||||||
childViews: [{
|
childViews: [{
|
||||||
type: 'ModalAlert',
|
type: 'ModalAlert',
|
||||||
options: {
|
options: {
|
||||||
|
@ -44,10 +44,11 @@ var LevelBuilder = Level.extend({
|
||||||
'',
|
'',
|
||||||
'Here are the main steps:',
|
'Here are the main steps:',
|
||||||
'',
|
'',
|
||||||
' * Define the starting tree',
|
' * Define the starting tree with ```define start```',
|
||||||
' * Enter the series of git commands that compose of the (optimal) solution',
|
' * Enter the series of git commands that compose the (optimal) solution',
|
||||||
' * Define the goal tree, which also defines the solution',
|
' * Define the goal tree with ```define goal```. Defining the goal also defines the solution',
|
||||||
' * Enter the command ```finish building``` to specify start dialogs and such'
|
' * Optionally define a hint with ```define hint```',
|
||||||
|
' * Enter the command ```finish``` to output your level JSON!'
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
|
@ -198,33 +199,20 @@ var LevelBuilder = Level.extend({
|
||||||
this.showGoal(command, deferred);
|
this.showGoal(command, deferred);
|
||||||
},
|
},
|
||||||
|
|
||||||
setHint: function(command, deferred) {
|
defineHint: function(command, deferred) {
|
||||||
this.level.hint = prompt('Enter a hint! Or blank if you dont want one');
|
this.level.hint = prompt('Enter a hint! Or blank if you dont want one');
|
||||||
if (command) { command.finishWith(deferred); }
|
if (command) { command.finishWith(deferred); }
|
||||||
},
|
},
|
||||||
|
|
||||||
setID: function(command, deferred) {
|
|
||||||
var id = prompt('Enter an ID');
|
|
||||||
while (!id || !id.length) {
|
|
||||||
id = prompt('Enter an ID... really this time');
|
|
||||||
}
|
|
||||||
this.level.id = id;
|
|
||||||
|
|
||||||
if (command) { command.finishWith(deferred); }
|
|
||||||
},
|
|
||||||
|
|
||||||
finish: function(command, deferred) {
|
finish: function(command, deferred) {
|
||||||
if (!this.gitCommandsIssued.length) {
|
if (!this.gitCommandsIssued.length) {
|
||||||
command.set('error', new GitError({
|
command.set('error', new Errors.GitError({
|
||||||
msg: 'Your solution is empty!'
|
msg: 'Your solution is empty!'
|
||||||
});
|
}));
|
||||||
deferred.resolve();
|
deferred.resolve();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.level.id) {
|
|
||||||
this.setID();
|
|
||||||
}
|
|
||||||
if (this.level.hint === undefined) {
|
if (this.level.hint === undefined) {
|
||||||
this.setHint();
|
this.setHint();
|
||||||
}
|
}
|
||||||
|
@ -239,7 +227,8 @@ var LevelBuilder = Level.extend({
|
||||||
'define start': this.defineStart,
|
'define start': this.defineStart,
|
||||||
'show start': this.showStart,
|
'show start': this.showStart,
|
||||||
'hide start': this.hideStart,
|
'hide start': this.hideStart,
|
||||||
'finish': this.finish
|
'finish': this.finish,
|
||||||
|
'define hint': this.defineHint
|
||||||
};
|
};
|
||||||
|
|
||||||
methodMap[command.get('method')].apply(this, arguments);
|
methodMap[command.get('method')].apply(this, arguments);
|
||||||
|
|
|
@ -161,14 +161,7 @@ var LevelDropdownView = ContainedBase.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
getIndexForID: function(id) {
|
getIndexForID: function(id) {
|
||||||
var index;
|
return Main.getLevelArbiter().getLevel(id).index;
|
||||||
var levels = this.sequenceToLevels[this.selectedSequence];
|
|
||||||
_.each(levels, function(level, _index) {
|
|
||||||
if (level.id == id) {
|
|
||||||
index = _index;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return index;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
selectFirst: function() {
|
selectFirst: function() {
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
exports.level = {
|
exports.level = {
|
||||||
id: 'intro1',
|
|
||||||
name: 'Introduction #1',
|
name: 'Introduction #1',
|
||||||
startDialog: {
|
startDialog: {
|
||||||
childViews: [{
|
childViews: [{
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
exports.level = {
|
exports.level = {
|
||||||
id: 'intro2',
|
|
||||||
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',
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
exports.level = {
|
exports.level = {
|
||||||
id: 'rebase1',
|
|
||||||
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',
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
exports.level = {
|
exports.level = {
|
||||||
id: 'rebase2',
|
|
||||||
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',
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
exports.level = {
|
exports.level = {
|
||||||
id: 'rebase3',
|
|
||||||
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',
|
||||||
|
|
2
todo.txt
2
todo.txt
|
@ -1,6 +1,5 @@
|
||||||
Big Things
|
Big Things
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
[ ] level builder finish
|
|
||||||
[ ] level builder dialog tester
|
[ ] level builder dialog tester
|
||||||
[ ] level builder dialog builder
|
[ ] level builder dialog builder
|
||||||
|
|
||||||
|
@ -32,6 +31,7 @@ Ideas for cleaning
|
||||||
Done things:
|
Done things:
|
||||||
(I only started this on Dec 17th 2012 to get a better sense of what was done)
|
(I only started this on Dec 17th 2012 to get a better sense of what was done)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
[x] level builder finish
|
||||||
[x] level builder? :OOO
|
[x] level builder? :OOO
|
||||||
* basically just an extension of level (or sandbox), that has commands like
|
* basically just an extension of level (or sandbox), that has commands like
|
||||||
```save tree beginning``` or ```save tree goal``` and then a final
|
```save tree beginning``` or ```save tree goal``` and then a final
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue