From 6ee05c1f0a45fd8dcfe97c96e388d1f8c81f6445 Mon Sep 17 00:00:00 2001 From: Peter Cottle Date: Sat, 5 Jan 2013 12:50:29 -0800 Subject: [PATCH] better --- build/bundle.js | 86 ++++++++++++++++++++++++--------- src/js/level/sandbox.js | 9 +++- src/js/level/sandboxCommands.js | 3 +- src/js/views/commandViews.js | 31 +++++++++--- src/style/main.css | 5 ++ todo.txt | 1 + 6 files changed, 102 insertions(+), 33 deletions(-) diff --git a/build/bundle.js b/build/bundle.js index b86910e0..cce6824c 100644 --- a/build/bundle.js +++ b/build/bundle.js @@ -4550,7 +4550,6 @@ var Sandbox = Backbone.View.extend({ Main.getEvents().trigger('commandSubmittedPassive', value); util.splitTextCommand(value, function(command) { - console.log('adding command', command); this.commandCollection.add(new Command({ rawStr: command, parseWaterfall: this.parseWaterfall @@ -4562,7 +4561,8 @@ var Sandbox = Backbone.View.extend({ var commandMap = { help: this.helpDialog, reset: this.reset, - delay: this.delay + delay: this.delay, + clear: this.clear }; var method = commandMap[command.get('method')]; if (!method) { throw new Error('no method for that wut'); } @@ -4570,6 +4570,11 @@ var Sandbox = Backbone.View.extend({ method.apply(this, [command, deferred]); }, + clear: function(command, deferred) { + Main.getEvents().trigger('clearOldCommands'); + command.finishWith(deferred); + }, + delay: function(command, deferred) { var amount = parseInt(command.get('regexResults')[1], 10); setTimeout(function() { @@ -12370,7 +12375,8 @@ var instantCommands = [ var regexMap = { 'help': /^help($|\s)|\?/, 'reset': /^reset($|\s)/, - 'delay': /^delay (\d+)$/ + 'delay': /^delay (\d+)$/, + 'clear': /^clear($|\s)/ }; var parse = function(str) { @@ -15096,6 +15102,7 @@ var CommandLineHistoryView = Backbone.View.extend({ this.collection.on('change', this.scrollDown, this); Main.getEvents().on('commandScrollDown', this.scrollDown, this); + Main.getEvents().on('clearOldCommands', this.clearOldCommands, this); }, addWarning: function(msg) { @@ -15111,20 +15118,33 @@ var CommandLineHistoryView = Backbone.View.extend({ this.collection.add(command); }, + clearOldCommands: function() { + // go through and get rid of every command that is "processed" or done + var toDestroy = []; + + this.collection.each(function(command) { + console.log('this command', command, command.get('status')); + if (command.get('status') !== 'inqueue' && + command.get('status') !== 'processing') { + toDestroy.push(command); + } + }, this); + + _.each(toDestroy, function(command) { + command.destroy(); + }, this); + this.scrollDown(); + }, + scrollDown: function() { // if commandDisplay is ever bigger than #terminal, we need to // add overflow-y to terminal and scroll down var cD = $('#commandDisplay')[0]; var t = $('#terminal')[0]; - if ($(t).hasClass('scrolling')) { - t.scrollTop = t.scrollHeight; - return; - } - if (cD.clientHeight > t.clientHeight) { - $(t).css('overflow-y', 'scroll'); - $(t).css('overflow-x', 'hidden'); - $(t).addClass('scrolling'); + var shouldScroll = (cD.clientHeight > t.clientHeight); + $(t).toggleClass('scrolling', shouldScroll); + if (shouldScroll) { t.scrollTop = t.scrollHeight; } }, @@ -15145,6 +15165,7 @@ var CommandLineHistoryView = Backbone.View.extend({ exports.CommandPromptView = CommandPromptView; exports.CommandLineHistoryView = CommandLineHistoryView; + }); require.define("/src/js/dialogs/sandbox.js",function(require,module,exports,__dirname,__filename,process,global){exports.helpDialog = [{ @@ -18151,7 +18172,6 @@ var Sandbox = Backbone.View.extend({ Main.getEvents().trigger('commandSubmittedPassive', value); util.splitTextCommand(value, function(command) { - console.log('adding command', command); this.commandCollection.add(new Command({ rawStr: command, parseWaterfall: this.parseWaterfall @@ -18163,7 +18183,8 @@ var Sandbox = Backbone.View.extend({ var commandMap = { help: this.helpDialog, reset: this.reset, - delay: this.delay + delay: this.delay, + clear: this.clear }; var method = commandMap[command.get('method')]; if (!method) { throw new Error('no method for that wut'); } @@ -18171,6 +18192,11 @@ var Sandbox = Backbone.View.extend({ method.apply(this, [command, deferred]); }, + clear: function(command, deferred) { + Main.getEvents().trigger('clearOldCommands'); + command.finishWith(deferred); + }, + delay: function(command, deferred) { var amount = parseInt(command.get('regexResults')[1], 10); setTimeout(function() { @@ -18244,7 +18270,8 @@ var instantCommands = [ var regexMap = { 'help': /^help($|\s)|\?/, 'reset': /^reset($|\s)/, - 'delay': /^delay (\d+)$/ + 'delay': /^delay (\d+)$/, + 'clear': /^clear($|\s)/ }; var parse = function(str) { @@ -19284,6 +19311,7 @@ var CommandLineHistoryView = Backbone.View.extend({ this.collection.on('change', this.scrollDown, this); Main.getEvents().on('commandScrollDown', this.scrollDown, this); + Main.getEvents().on('clearOldCommands', this.clearOldCommands, this); }, addWarning: function(msg) { @@ -19299,20 +19327,33 @@ var CommandLineHistoryView = Backbone.View.extend({ this.collection.add(command); }, + clearOldCommands: function() { + // go through and get rid of every command that is "processed" or done + var toDestroy = []; + + this.collection.each(function(command) { + console.log('this command', command, command.get('status')); + if (command.get('status') !== 'inqueue' && + command.get('status') !== 'processing') { + toDestroy.push(command); + } + }, this); + + _.each(toDestroy, function(command) { + command.destroy(); + }, this); + this.scrollDown(); + }, + scrollDown: function() { // if commandDisplay is ever bigger than #terminal, we need to // add overflow-y to terminal and scroll down var cD = $('#commandDisplay')[0]; var t = $('#terminal')[0]; - if ($(t).hasClass('scrolling')) { - t.scrollTop = t.scrollHeight; - return; - } - if (cD.clientHeight > t.clientHeight) { - $(t).css('overflow-y', 'scroll'); - $(t).css('overflow-x', 'hidden'); - $(t).addClass('scrolling'); + var shouldScroll = (cD.clientHeight > t.clientHeight); + $(t).toggleClass('scrolling', shouldScroll); + if (shouldScroll) { t.scrollTop = t.scrollHeight; } }, @@ -19333,6 +19374,7 @@ var CommandLineHistoryView = Backbone.View.extend({ exports.CommandPromptView = CommandPromptView; exports.CommandLineHistoryView = CommandLineHistoryView; + }); require("/src/js/views/commandViews.js"); diff --git a/src/js/level/sandbox.js b/src/js/level/sandbox.js index 20c93c2d..b6f498f9 100644 --- a/src/js/level/sandbox.js +++ b/src/js/level/sandbox.js @@ -82,7 +82,6 @@ var Sandbox = Backbone.View.extend({ Main.getEvents().trigger('commandSubmittedPassive', value); util.splitTextCommand(value, function(command) { - console.log('adding command', command); this.commandCollection.add(new Command({ rawStr: command, parseWaterfall: this.parseWaterfall @@ -94,7 +93,8 @@ var Sandbox = Backbone.View.extend({ var commandMap = { help: this.helpDialog, reset: this.reset, - delay: this.delay + delay: this.delay, + clear: this.clear }; var method = commandMap[command.get('method')]; if (!method) { throw new Error('no method for that wut'); } @@ -102,6 +102,11 @@ var Sandbox = Backbone.View.extend({ method.apply(this, [command, deferred]); }, + clear: function(command, deferred) { + Main.getEvents().trigger('clearOldCommands'); + command.finishWith(deferred); + }, + delay: function(command, deferred) { var amount = parseInt(command.get('regexResults')[1], 10); setTimeout(function() { diff --git a/src/js/level/sandboxCommands.js b/src/js/level/sandboxCommands.js index 98557437..0ae849e3 100644 --- a/src/js/level/sandboxCommands.js +++ b/src/js/level/sandboxCommands.js @@ -39,7 +39,8 @@ var instantCommands = [ var regexMap = { 'help': /^help($|\s)|\?/, 'reset': /^reset($|\s)/, - 'delay': /^delay (\d+)$/ + 'delay': /^delay (\d+)$/, + 'clear': /^clear($|\s)/ }; var parse = function(str) { diff --git a/src/js/views/commandViews.js b/src/js/views/commandViews.js index 865a5fb2..5763b57f 100644 --- a/src/js/views/commandViews.js +++ b/src/js/views/commandViews.js @@ -310,6 +310,7 @@ var CommandLineHistoryView = Backbone.View.extend({ this.collection.on('change', this.scrollDown, this); Main.getEvents().on('commandScrollDown', this.scrollDown, this); + Main.getEvents().on('clearOldCommands', this.clearOldCommands, this); }, addWarning: function(msg) { @@ -325,20 +326,33 @@ var CommandLineHistoryView = Backbone.View.extend({ this.collection.add(command); }, + clearOldCommands: function() { + // go through and get rid of every command that is "processed" or done + var toDestroy = []; + + this.collection.each(function(command) { + console.log('this command', command, command.get('status')); + if (command.get('status') !== 'inqueue' && + command.get('status') !== 'processing') { + toDestroy.push(command); + } + }, this); + + _.each(toDestroy, function(command) { + command.destroy(); + }, this); + this.scrollDown(); + }, + scrollDown: function() { // if commandDisplay is ever bigger than #terminal, we need to // add overflow-y to terminal and scroll down var cD = $('#commandDisplay')[0]; var t = $('#terminal')[0]; - if ($(t).hasClass('scrolling')) { - t.scrollTop = t.scrollHeight; - return; - } - if (cD.clientHeight > t.clientHeight) { - $(t).css('overflow-y', 'scroll'); - $(t).css('overflow-x', 'hidden'); - $(t).addClass('scrolling'); + var shouldScroll = (cD.clientHeight > t.clientHeight); + $(t).toggleClass('scrolling', shouldScroll); + if (shouldScroll) { t.scrollTop = t.scrollHeight; } }, @@ -358,3 +372,4 @@ var CommandLineHistoryView = Backbone.View.extend({ exports.CommandPromptView = CommandPromptView; exports.CommandLineHistoryView = CommandLineHistoryView; + diff --git a/src/style/main.css b/src/style/main.css index dddc6cba..1b288d05 100644 --- a/src/style/main.css +++ b/src/style/main.css @@ -361,6 +361,11 @@ p.commandLine span.prompt { border-radius: 5px; } +#commandLineHistory #terminal.scrolling { + overflow-y: scroll; + overflow-x: hidden; +} + #prompt { text-align: left; } diff --git a/todo.txt b/todo.txt index 548006e2..dc274c32 100644 --- a/todo.txt +++ b/todo.txt @@ -33,6 +33,7 @@ Big Bugs to fix: Done things: (I only started this on Dec 17th 2012 to get a better sense of what was done) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[x] allow command history to clear finished ones [x] put in some > into the rules for CSS [x] fix bug for multiview, i think its from the die() on everyone [x] fixed bug in command queue