awesome hooking everything up

This commit is contained in:
Peter Cottle 2013-01-06 23:50:52 -08:00
parent 378fcc0377
commit 0735eb3d64
11 changed files with 266 additions and 139 deletions

View file

@ -4617,6 +4617,14 @@ var Sandbox = Backbone.View.extend({
deferred.resolve(); deferred.resolve();
}, },
showLevels: function(command, deferred) {
var whenClosed = Q.defer();
Main.getLevelDropdown().show(whenClosed);
whenClosed.promise.done(function() {
command.finishWith(deferred);
});
},
processSandboxCommand: function(command, deferred) { processSandboxCommand: function(command, deferred) {
var commandMap = { var commandMap = {
'help': this.helpDialog, 'help': this.helpDialog,
@ -4625,7 +4633,8 @@ var Sandbox = Backbone.View.extend({
'clear': this.clear, 'clear': this.clear,
'exit level': this.exitLevel, 'exit level': this.exitLevel,
'level': this.startLevel, 'level': this.startLevel,
'sandbox': this.exitLevel 'sandbox': this.exitLevel,
'levels': this.showLevels
}; };
var method = commandMap[command.get('method')]; var method = commandMap[command.get('method')];
if (!method) { throw new Error('no method for that wut'); } if (!method) { throw new Error('no method for that wut'); }
@ -6268,6 +6277,7 @@ var commandUI;
var sandbox; var sandbox;
var eventBaton; var eventBaton;
var levelArbiter; var levelArbiter;
var levelDropdown;
/////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////
@ -6285,11 +6295,15 @@ var init = function() {
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; var LevelArbiter = require('../level/arbiter').LevelArbiter;
var LevelDropdownView = require('../views/levelDropdownView').LevelDropdownView;
eventBaton = new EventBaton(); eventBaton = new EventBaton();
commandUI = new CommandUI(); commandUI = new CommandUI();
sandbox = new Sandbox(); sandbox = new Sandbox();
levelArbiter = new LevelArbiter(); levelArbiter = new LevelArbiter();
levelDropdown = new LevelDropdownView({
wait: true
});
// 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() {
@ -6403,6 +6417,10 @@ exports.getLevelArbiter = function() {
return levelArbiter; return levelArbiter;
}; };
exports.getLevelDropdown = function() {
return levelDropdown;
};
exports.init = init; exports.init = init;
@ -6668,6 +6686,7 @@ var Level = Sandbox.extend({
levelSolved: function(defer) { levelSolved: function(defer) {
this.solved = true; this.solved = true;
Main.getEvents().trigger('levelSolved', this.level.id);
this.hideGoal(); this.hideGoal();
var nextLevel = Main.getLevelArbiter().getNextLevel(this.level.id); var nextLevel = Main.getLevelArbiter().getNextLevel(this.level.id);
@ -12784,7 +12803,8 @@ var regexMap = {
'clear': /^clear($|\s)/, 'clear': /^clear($|\s)/,
'exit level': /^exit level($|\s)/, 'exit level': /^exit level($|\s)/,
'sandbox': /^sandbox($|\s)/, 'sandbox': /^sandbox($|\s)/,
'level': /^level\s?([a-zA-Z0-9]*)/ 'level': /^level\s?([a-zA-Z0-9]*)/,
'levels': /^levels($|\s)/
}; };
var parse = function(str) { var parse = function(str) {
@ -15390,11 +15410,15 @@ var Backbone = require('backbone');
var levelSequences = require('../levels').levelSequences; var levelSequences = require('../levels').levelSequences;
var sequenceInfo = require('../levels').sequenceInfo; var sequenceInfo = require('../levels').sequenceInfo;
var Main = require('../app');
function LevelArbiter() { function LevelArbiter() {
this.levelMap = {}; this.levelMap = {};
this.init(); this.init();
// TODO -- local storage sync // TODO -- local storage sync
this.solvedMap = {}; this.solvedMap = {};
Main.getEvents().on('levelSolved', this.levelSolved, this);
} }
LevelArbiter.prototype.init = function() { LevelArbiter.prototype.init = function() {
@ -15426,10 +15450,13 @@ LevelArbiter.prototype.isLevelSolved = function(id) {
if (!this.levelMap[id]) { if (!this.levelMap[id]) {
throw new Error('that level doesnt exist!'); throw new Error('that level doesnt exist!');
} }
console.log('is it solved', id);
return Boolean(this.solvedMap[id]); return Boolean(this.solvedMap[id]);
}; };
LevelArbiter.prototype.levelSolved = function(id) {
this.solvedMap[id] = true;
};
LevelArbiter.prototype.validateLevel = function(level) { LevelArbiter.prototype.validateLevel = function(level) {
level = level || {}; level = level || {};
var requiredFields = [ var requiredFields = [
@ -15557,6 +15584,143 @@ require.define("/src/levels/rebase/2.js",function(require,module,exports,__dirna
}; };
});
require.define("/src/js/views/levelDropdownView.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore');
var Q = require('q');
// horrible hack to get localStorage Backbone plugin
var Backbone = (!require('../util').isBrowser()) ? require('backbone') : window.Backbone;
var util = require('../util');
var KeyboardListener = require('../util/keyboard').KeyboardListener;
var Main = require('../app');
var ModalTerminal = require('../views').ModalTerminal;
var ContainedBase = require('../views').ContainedBase;
var BaseView = require('../views').BaseView;
var LevelDropdownView = ContainedBase.extend({
tagName: 'div',
className: 'levelDropdownView box vertical',
template: _.template($('#level-dropdown-view').html()),
initialize: function(options) {
options = options || {};
this.JSON = {};
Main.getEvents().on('levelSolved', this.updateSolvedStatus, this);
this.navEvents = _.clone(Backbone.Events);
this.navEvents.on('clickedID', _.debounce(
_.bind(this.loadLevelID, this),
300,
true
));
this.sequences = Main.getLevelArbiter().getSequences();
this.container = new ModalTerminal({
title: 'Select a Level'
});
this.render();
this.buildSequences();
if (!options.wait) {
this.show();
}
},
show: function(deferred) {
this.showDeferred = deferred;
LevelDropdownView.__super__.show.apply(this);
},
hide: function() {
if (this.showDeferred) {
this.showDeferred.resolve();
}
this.showDeferred = undefined;
LevelDropdownView.__super__.hide.apply(this);
},
loadLevelID: function(id) {
Main.getEventBaton().trigger(
'commandSubmitted',
'level ' + id
);
this.hide();
},
updateSolvedStatus: function() {
_.each(this.seriesViews, function(view) {
view.updateSolvedStatus();
}, this);
},
buildSequences: function() {
this.seriesViews = [];
_.each(this.sequences, function(sequenceName) {
this.seriesViews.push(new SeriesView({
destination: this.$el,
name: sequenceName,
navEvents: this.navEvents
}));
}, this);
}
});
var SeriesView = BaseView.extend({
tagName: 'div',
className: 'seriesView box flex1 vertical',
template: _.template($('#series-view').html()),
events: {
'click div.levelIcon': 'click'
},
initialize: function(options) {
this.name = options.name || 'intro';
this.navEvents = options.navEvents;
this.info = Main.getLevelArbiter().getSequenceInfo(this.name);
this.levels = Main.getLevelArbiter().getLevelsInSequence(this.name);
this.levelIDs = [];
_.each(this.levels, function(level) {
this.levelIDs.push(level.id);
}, this);
this.destination = options.destination;
this.JSON = {
displayName: this.info.displayName,
about: this.info.about,
ids: this.levelIDs
};
this.render();
this.updateSolvedStatus();
},
updateSolvedStatus: function() {
// this is a bit hacky, it really should be some nice model
// property changing but it's the 11th hour...
var toLoop = this.$('div.levelIcon').each(function(index, el) {
var id = el.id;
$(el).toggleClass('solved', Main.getLevelArbiter().isLevelSolved(id));
});
},
click: function(ev) {
if (!ev || !ev.srcElement || !ev.srcElement.id) {
console.warn('wut, no id'); return;
}
var id = ev.srcElement.id;
this.navEvents.trigger('clickedID', id);
}
});
exports.LevelDropdownView = LevelDropdownView;
}); });
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');
@ -16083,129 +16247,6 @@ HeadlessGit.prototype.sendCommand = function(value) {
exports.HeadlessGit = HeadlessGit; exports.HeadlessGit = HeadlessGit;
});
require.define("/src/js/views/levelDropdownView.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore');
var Q = require('q');
// horrible hack to get localStorage Backbone plugin
var Backbone = (!require('../util').isBrowser()) ? require('backbone') : window.Backbone;
var util = require('../util');
var KeyboardListener = require('../util/keyboard').KeyboardListener;
var Main = require('../app');
var ModalTerminal = require('../views').ModalTerminal;
var ContainedBase = require('../views').ContainedBase;
var BaseView = require('../views').BaseView;
var LevelDropdownView = ContainedBase.extend({
tagName: 'div',
className: 'levelDropdownView box vertical',
template: _.template($('#level-dropdown-view').html()),
initialize: function(options) {
options = options || {};
this.JSON = {};
this.navEvents = _.clone(Backbone.Events);
this.navEvents.on('clickedID', _.debounce(
_.bind(this.loadLevelID, this),
300,
true
));
this.sequences = Main.getLevelArbiter().getSequences();
this.container = new ModalTerminal({
title: 'Select a Level'
});
this.render();
this.buildSequences();
if (!options.wait) {
this.show();
}
},
loadLevelID: function(id) {
Main.getEventBaton().trigger(
'commandSubmitted',
'level ' + id
);
this.hide();
},
updateSolvedStatus: function() {
_.each(this.seriesViews, function(view) {
view.updateSolvedStatus();
}, this);
},
buildSequences: function() {
this.seriesViews = [];
_.each(this.sequences, function(sequenceName) {
this.seriesViews.push(new SeriesView({
destination: this.$el,
name: sequenceName,
navEvents: this.navEvents
}));
}, this);
}
});
var SeriesView = BaseView.extend({
tagName: 'div',
className: 'seriesView box flex1 vertical',
template: _.template($('#series-view').html()),
events: {
'click div.levelIcon': 'click'
},
initialize: function(options) {
this.name = options.name || 'intro';
this.navEvents = options.navEvents;
this.info = Main.getLevelArbiter().getSequenceInfo(this.name);
this.levels = Main.getLevelArbiter().getLevelsInSequence(this.name);
this.levelIDs = [];
_.each(this.levels, function(level) {
this.levelIDs.push(level.id);
}, this);
this.destination = options.destination;
this.JSON = {
displayName: this.info.displayName,
about: this.info.about,
ids: this.levelIDs
};
this.render();
this.updateSolvedStatus();
},
updateSolvedStatus: function() {
// this is a bit hacky, it really should be some nice model
// property changing but it's the 11th hour...
var toLoop = this.$('div.levelIcon').each(function(index, el) {
var id = el.id;
$(el).toggleClass('solved', Main.getLevelArbiter().isLevelSolved(id));
});
},
click: function(ev) {
console.log(ev.srcElement);
console.log(ev.srcElement.id);
if (!ev || !ev.srcElement || !ev.srcElement.id) {
console.warn('wut, no id'); return;
}
var id = ev.srcElement.id;
this.navEvents.trigger('clickedID', id);
}
});
exports.LevelDropdownView = LevelDropdownView;
}); });
require.define("/src/js/app/index.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore'); require.define("/src/js/app/index.js",function(require,module,exports,__dirname,__filename,process,global){var _ = require('underscore');
@ -16222,6 +16263,7 @@ var commandUI;
var sandbox; var sandbox;
var eventBaton; var eventBaton;
var levelArbiter; var levelArbiter;
var levelDropdown;
/////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////
@ -16239,11 +16281,15 @@ var init = function() {
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; var LevelArbiter = require('../level/arbiter').LevelArbiter;
var LevelDropdownView = require('../views/levelDropdownView').LevelDropdownView;
eventBaton = new EventBaton(); eventBaton = new EventBaton();
commandUI = new CommandUI(); commandUI = new CommandUI();
sandbox = new Sandbox(); sandbox = new Sandbox();
levelArbiter = new LevelArbiter(); levelArbiter = new LevelArbiter();
levelDropdown = new LevelDropdownView({
wait: true
});
// 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() {
@ -16357,6 +16403,10 @@ exports.getLevelArbiter = function() {
return levelArbiter; return levelArbiter;
}; };
exports.getLevelDropdown = function() {
return levelDropdown;
};
exports.init = init; exports.init = init;
@ -18569,11 +18619,15 @@ var Backbone = require('backbone');
var levelSequences = require('../levels').levelSequences; var levelSequences = require('../levels').levelSequences;
var sequenceInfo = require('../levels').sequenceInfo; var sequenceInfo = require('../levels').sequenceInfo;
var Main = require('../app');
function LevelArbiter() { function LevelArbiter() {
this.levelMap = {}; this.levelMap = {};
this.init(); this.init();
// TODO -- local storage sync // TODO -- local storage sync
this.solvedMap = {}; this.solvedMap = {};
Main.getEvents().on('levelSolved', this.levelSolved, this);
} }
LevelArbiter.prototype.init = function() { LevelArbiter.prototype.init = function() {
@ -18605,10 +18659,13 @@ LevelArbiter.prototype.isLevelSolved = function(id) {
if (!this.levelMap[id]) { if (!this.levelMap[id]) {
throw new Error('that level doesnt exist!'); throw new Error('that level doesnt exist!');
} }
console.log('is it solved', id);
return Boolean(this.solvedMap[id]); return Boolean(this.solvedMap[id]);
}; };
LevelArbiter.prototype.levelSolved = function(id) {
this.solvedMap[id] = true;
};
LevelArbiter.prototype.validateLevel = function(level) { LevelArbiter.prototype.validateLevel = function(level) {
level = level || {}; level = level || {};
var requiredFields = [ var requiredFields = [
@ -19001,6 +19058,7 @@ var Level = Sandbox.extend({
levelSolved: function(defer) { levelSolved: function(defer) {
this.solved = true; this.solved = true;
Main.getEvents().trigger('levelSolved', this.level.id);
this.hideGoal(); this.hideGoal();
var nextLevel = Main.getLevelArbiter().getNextLevel(this.level.id); var nextLevel = Main.getLevelArbiter().getNextLevel(this.level.id);
@ -19377,6 +19435,14 @@ var Sandbox = Backbone.View.extend({
deferred.resolve(); deferred.resolve();
}, },
showLevels: function(command, deferred) {
var whenClosed = Q.defer();
Main.getLevelDropdown().show(whenClosed);
whenClosed.promise.done(function() {
command.finishWith(deferred);
});
},
processSandboxCommand: function(command, deferred) { processSandboxCommand: function(command, deferred) {
var commandMap = { var commandMap = {
'help': this.helpDialog, 'help': this.helpDialog,
@ -19385,7 +19451,8 @@ var Sandbox = Backbone.View.extend({
'clear': this.clear, 'clear': this.clear,
'exit level': this.exitLevel, 'exit level': this.exitLevel,
'level': this.startLevel, 'level': this.startLevel,
'sandbox': this.exitLevel 'sandbox': this.exitLevel,
'levels': this.showLevels
}; };
var method = commandMap[command.get('method')]; var method = commandMap[command.get('method')];
if (!method) { throw new Error('no method for that wut'); } if (!method) { throw new Error('no method for that wut'); }
@ -19489,7 +19556,8 @@ var regexMap = {
'clear': /^clear($|\s)/, 'clear': /^clear($|\s)/,
'exit level': /^exit level($|\s)/, 'exit level': /^exit level($|\s)/,
'sandbox': /^sandbox($|\s)/, 'sandbox': /^sandbox($|\s)/,
'level': /^level\s?([a-zA-Z0-9]*)/ 'level': /^level\s?([a-zA-Z0-9]*)/,
'levels': /^levels($|\s)/
}; };
var parse = function(str) { var parse = function(str) {
@ -19909,6 +19977,7 @@ $(document).ready(function() {
window.eventBaton = toGlobalize.Main.getEventBaton(); window.eventBaton = toGlobalize.Main.getEventBaton();
window.sandbox = toGlobalize.Main.getSandbox(); window.sandbox = toGlobalize.Main.getSandbox();
window.modules = toGlobalize; window.modules = toGlobalize;
window.levelDropdown = toGlobalize.Main.getLevelDropdown();
}); });
@ -21403,6 +21472,8 @@ var LevelDropdownView = ContainedBase.extend({
options = options || {}; options = options || {};
this.JSON = {}; this.JSON = {};
Main.getEvents().on('levelSolved', this.updateSolvedStatus, this);
this.navEvents = _.clone(Backbone.Events); this.navEvents = _.clone(Backbone.Events);
this.navEvents.on('clickedID', _.debounce( this.navEvents.on('clickedID', _.debounce(
_.bind(this.loadLevelID, this), _.bind(this.loadLevelID, this),
@ -21422,6 +21493,20 @@ var LevelDropdownView = ContainedBase.extend({
} }
}, },
show: function(deferred) {
this.showDeferred = deferred;
LevelDropdownView.__super__.show.apply(this);
},
hide: function() {
if (this.showDeferred) {
this.showDeferred.resolve();
}
this.showDeferred = undefined;
LevelDropdownView.__super__.hide.apply(this);
},
loadLevelID: function(id) { loadLevelID: function(id) {
Main.getEventBaton().trigger( Main.getEventBaton().trigger(
'commandSubmitted', 'commandSubmitted',
@ -21488,8 +21573,6 @@ var SeriesView = BaseView.extend({
}, },
click: function(ev) { click: function(ev) {
console.log(ev.srcElement);
console.log(ev.srcElement.id);
if (!ev || !ev.srcElement || !ev.srcElement.id) { if (!ev || !ev.srcElement || !ev.srcElement.id) {
console.warn('wut, no id'); return; console.warn('wut, no id'); return;
} }

View file

@ -195,7 +195,7 @@
<div class="index box" id="<%=ids[i]%>"> <div class="index box" id="<%=ids[i]%>">
<i class="icon-ok-circle"></i> <i class="icon-ok-circle"></i>
<div class="indexNum"> <div class="indexNum">
<%= i %> <%= i + 1 %>
</div> </div>
</div> </div>
</div> </div>

View file

@ -12,6 +12,7 @@ var commandUI;
var sandbox; var sandbox;
var eventBaton; var eventBaton;
var levelArbiter; var levelArbiter;
var levelDropdown;
/////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////
@ -29,11 +30,15 @@ var init = function() {
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; var LevelArbiter = require('../level/arbiter').LevelArbiter;
var LevelDropdownView = require('../views/levelDropdownView').LevelDropdownView;
eventBaton = new EventBaton(); eventBaton = new EventBaton();
commandUI = new CommandUI(); commandUI = new CommandUI();
sandbox = new Sandbox(); sandbox = new Sandbox();
levelArbiter = new LevelArbiter(); levelArbiter = new LevelArbiter();
levelDropdown = new LevelDropdownView({
wait: true
});
// 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() {
@ -147,5 +152,9 @@ exports.getLevelArbiter = function() {
return levelArbiter; return levelArbiter;
}; };
exports.getLevelDropdown = function() {
return levelDropdown;
};
exports.init = init; exports.init = init;

View file

@ -6,11 +6,15 @@ var Backbone = require('backbone');
var levelSequences = require('../levels').levelSequences; var levelSequences = require('../levels').levelSequences;
var sequenceInfo = require('../levels').sequenceInfo; var sequenceInfo = require('../levels').sequenceInfo;
var Main = require('../app');
function LevelArbiter() { function LevelArbiter() {
this.levelMap = {}; this.levelMap = {};
this.init(); this.init();
// TODO -- local storage sync // TODO -- local storage sync
this.solvedMap = {}; this.solvedMap = {};
Main.getEvents().on('levelSolved', this.levelSolved, this);
} }
LevelArbiter.prototype.init = function() { LevelArbiter.prototype.init = function() {
@ -42,10 +46,13 @@ LevelArbiter.prototype.isLevelSolved = function(id) {
if (!this.levelMap[id]) { if (!this.levelMap[id]) {
throw new Error('that level doesnt exist!'); throw new Error('that level doesnt exist!');
} }
console.log('is it solved', id);
return Boolean(this.solvedMap[id]); return Boolean(this.solvedMap[id]);
}; };
LevelArbiter.prototype.levelSolved = function(id) {
this.solvedMap[id] = true;
};
LevelArbiter.prototype.validateLevel = function(level) { LevelArbiter.prototype.validateLevel = function(level) {
level = level || {}; level = level || {};
var requiredFields = [ var requiredFields = [

View file

@ -258,6 +258,7 @@ var Level = Sandbox.extend({
levelSolved: function(defer) { levelSolved: function(defer) {
this.solved = true; this.solved = true;
Main.getEvents().trigger('levelSolved', this.level.id);
this.hideGoal(); this.hideGoal();
var nextLevel = Main.getLevelArbiter().getNextLevel(this.level.id); var nextLevel = Main.getLevelArbiter().getNextLevel(this.level.id);

View file

@ -149,6 +149,14 @@ var Sandbox = Backbone.View.extend({
deferred.resolve(); deferred.resolve();
}, },
showLevels: function(command, deferred) {
var whenClosed = Q.defer();
Main.getLevelDropdown().show(whenClosed);
whenClosed.promise.done(function() {
command.finishWith(deferred);
});
},
processSandboxCommand: function(command, deferred) { processSandboxCommand: function(command, deferred) {
var commandMap = { var commandMap = {
'help': this.helpDialog, 'help': this.helpDialog,
@ -157,7 +165,8 @@ var Sandbox = Backbone.View.extend({
'clear': this.clear, 'clear': this.clear,
'exit level': this.exitLevel, 'exit level': this.exitLevel,
'level': this.startLevel, 'level': this.startLevel,
'sandbox': this.exitLevel 'sandbox': this.exitLevel,
'levels': this.showLevels
}; };
var method = commandMap[command.get('method')]; var method = commandMap[command.get('method')];
if (!method) { throw new Error('no method for that wut'); } if (!method) { throw new Error('no method for that wut'); }

View file

@ -43,7 +43,8 @@ var regexMap = {
'clear': /^clear($|\s)/, 'clear': /^clear($|\s)/,
'exit level': /^exit level($|\s)/, 'exit level': /^exit level($|\s)/,
'sandbox': /^sandbox($|\s)/, 'sandbox': /^sandbox($|\s)/,
'level': /^level\s?([a-zA-Z0-9]*)/ 'level': /^level\s?([a-zA-Z0-9]*)/,
'levels': /^levels($|\s)/
}; };
var parse = function(str) { var parse = function(str) {

View file

@ -34,5 +34,6 @@ $(document).ready(function() {
window.eventBaton = toGlobalize.Main.getEventBaton(); window.eventBaton = toGlobalize.Main.getEventBaton();
window.sandbox = toGlobalize.Main.getSandbox(); window.sandbox = toGlobalize.Main.getSandbox();
window.modules = toGlobalize; window.modules = toGlobalize;
window.levelDropdown = toGlobalize.Main.getLevelDropdown();
}); });

View file

@ -20,6 +20,8 @@ var LevelDropdownView = ContainedBase.extend({
options = options || {}; options = options || {};
this.JSON = {}; this.JSON = {};
Main.getEvents().on('levelSolved', this.updateSolvedStatus, this);
this.navEvents = _.clone(Backbone.Events); this.navEvents = _.clone(Backbone.Events);
this.navEvents.on('clickedID', _.debounce( this.navEvents.on('clickedID', _.debounce(
_.bind(this.loadLevelID, this), _.bind(this.loadLevelID, this),
@ -39,6 +41,20 @@ var LevelDropdownView = ContainedBase.extend({
} }
}, },
show: function(deferred) {
this.showDeferred = deferred;
LevelDropdownView.__super__.show.apply(this);
},
hide: function() {
if (this.showDeferred) {
this.showDeferred.resolve();
}
this.showDeferred = undefined;
LevelDropdownView.__super__.hide.apply(this);
},
loadLevelID: function(id) { loadLevelID: function(id) {
Main.getEventBaton().trigger( Main.getEventBaton().trigger(
'commandSubmitted', 'commandSubmitted',
@ -105,8 +121,6 @@ var SeriesView = BaseView.extend({
}, },
click: function(ev) { click: function(ev) {
console.log(ev.srcElement);
console.log(ev.srcElement.id);
if (!ev || !ev.srcElement || !ev.srcElement.id) { if (!ev || !ev.srcElement || !ev.srcElement.id) {
console.warn('wut, no id'); return; console.warn('wut, no id'); return;
} }

View file

@ -575,7 +575,7 @@ div.iconHolder {
div.seriesView p.about { div.seriesView p.about {
margin: 0px; margin: 0px;
padding: 4px; padding: 4px;
font-size: 10px; font-size: 12px;
color: #CCC; color: #CCC;
} }

View file

@ -1,6 +1,7 @@
Big Things Big Things
~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~
[ ] levels dropdown selection? [ ] local storage for solved map
[ ] hookup for when solving happens
[ ] level builder? :OOO [ ] 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
@ -34,6 +35,7 @@ Big Bugs to fix:
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] levels dropdown selection?
[x] git demonstration view -- shouldnt be too bad. LOL WHAT A FUCKING JOKE like 4 hours [x] git demonstration view -- shouldnt be too bad. LOL WHAT A FUCKING JOKE like 4 hours
[x] gotoSandbox command [x] gotoSandbox command
[x] "next level?" dialog after beating level [x] "next level?" dialog after beating level