diff --git a/build/bundle.js b/build/bundle.js index 982484c2..5aa56080 100644 --- a/build/bundle.js +++ b/build/bundle.js @@ -9810,13 +9810,29 @@ var LeftRightView = PositiveNegativeBase.extend({ 'click .right': 'positive' }, + positive: function() { + this.pipeEvents.trigger('positive'); + LeftRightView.__super__.positive.apply(this); + }, + + negative: function() { + this.pipeEvents.trigger('negative'); + LeftRightView.__super__.negative.apply(this); + }, + initialize: function(options) { if (!options.destination || !options.events) { throw new Error('needmore'); } this.destination = options.destination; - this.navEvents = options.events; + + // we switch to a system where every leftrightview has its own + // events system to add support for git demonstration view taking control of the + // click events + this.pipeEvents = options.events; + this.navEvents = _.clone(Backbone.Events); + this.JSON = { showLeft: (options.showLeft === undefined) ? true : options.showLeft, lastNav: (options.lastNav === undefined) ? false : options.lastNav @@ -15315,7 +15331,17 @@ var MultiView = Backbone.View.extend({ }, this), this.navEventDebounce, true); }, + lock: function() { + this.locked = true; + }, + + unlock: function() { + this.locked = false; + }, + navForward: function() { + // we need to prevent nav changes when a git demonstration view hasnt finished + if (this.locked) { return; } if (this.currentIndex === this.childViews.length - 1) { this.hideViewIndex(this.currentIndex); this.finish(); @@ -15386,6 +15412,9 @@ var MultiView = Backbone.View.extend({ showLeft: (index !== 0), lastNav: (index === this.childViewJSONs.length - 1) }); + if (view.receiveMetaNav) { + view.receiveMetaNav(leftRight, this); + } }, render: function() { @@ -15480,12 +15509,16 @@ var GitDemonstrationView = ContainedBase.extend({ } }, + receiveMetaNav: function(navView, metaContainerView) { + var _this = this; + navView.navEvents.on('positive', this.positive, this); + this.metaContainerView = metaContainerView; + }, + checkScroll: function() { - console.log('checking scroll'); var children = this.$('div.demonstrationText').children(); var heights = _.map(children, function(child) { return child.clientHeight; }); var totalHeight = _.reduce(heights, function(a, b) { return a + b; }); - console.log(children, heights, totalHeight); if (totalHeight < this.$('div.demonstrationText').height()) { this.$('div.demonstrationText').addClass('noLongText'); } @@ -15508,12 +15541,16 @@ var GitDemonstrationView = ContainedBase.extend({ takeControl: function() { this.hasControl = true; this.keyboardListener.listen(); + + if (this.metaContainerView) { this.metaContainerView.lock(); } }, releaseControl: function() { if (!this.hasControl) { return; } this.hasControl = false; this.keyboardListener.mute(); + + if (this.metaContainerView) { this.metaContainerView.unlock(); } }, reset: function() { @@ -15524,11 +15561,17 @@ var GitDemonstrationView = ContainedBase.extend({ }, positive: function() { - if (this.demonstrated) { + if (this.demonstrated || !this.hasControl) { + // dont do anything if we are demonstrating, and if + // we receive a meta nav event and we aren't listening, + // then dont do anything either return; } this.demonstrated = true; + this.demonstrate(); + }, + demonstrate: function() { this.$el.toggleClass('demonstrating', true); var whenDone = Q.defer(); @@ -22392,12 +22435,16 @@ var GitDemonstrationView = ContainedBase.extend({ } }, + receiveMetaNav: function(navView, metaContainerView) { + var _this = this; + navView.navEvents.on('positive', this.positive, this); + this.metaContainerView = metaContainerView; + }, + checkScroll: function() { - console.log('checking scroll'); var children = this.$('div.demonstrationText').children(); var heights = _.map(children, function(child) { return child.clientHeight; }); var totalHeight = _.reduce(heights, function(a, b) { return a + b; }); - console.log(children, heights, totalHeight); if (totalHeight < this.$('div.demonstrationText').height()) { this.$('div.demonstrationText').addClass('noLongText'); } @@ -22420,12 +22467,16 @@ var GitDemonstrationView = ContainedBase.extend({ takeControl: function() { this.hasControl = true; this.keyboardListener.listen(); + + if (this.metaContainerView) { this.metaContainerView.lock(); } }, releaseControl: function() { if (!this.hasControl) { return; } this.hasControl = false; this.keyboardListener.mute(); + + if (this.metaContainerView) { this.metaContainerView.unlock(); } }, reset: function() { @@ -22436,11 +22487,17 @@ var GitDemonstrationView = ContainedBase.extend({ }, positive: function() { - if (this.demonstrated) { + if (this.demonstrated || !this.hasControl) { + // dont do anything if we are demonstrating, and if + // we receive a meta nav event and we aren't listening, + // then dont do anything either return; } this.demonstrated = true; + this.demonstrate(); + }, + demonstrate: function() { this.$el.toggleClass('demonstrating', true); var whenDone = Q.defer(); @@ -22699,13 +22756,29 @@ var LeftRightView = PositiveNegativeBase.extend({ 'click .right': 'positive' }, + positive: function() { + this.pipeEvents.trigger('positive'); + LeftRightView.__super__.positive.apply(this); + }, + + negative: function() { + this.pipeEvents.trigger('negative'); + LeftRightView.__super__.negative.apply(this); + }, + initialize: function(options) { if (!options.destination || !options.events) { throw new Error('needmore'); } this.destination = options.destination; - this.navEvents = options.events; + + // we switch to a system where every leftrightview has its own + // events system to add support for git demonstration view taking control of the + // click events + this.pipeEvents = options.events; + this.navEvents = _.clone(Backbone.Events); + this.JSON = { showLeft: (options.showLeft === undefined) ? true : options.showLeft, lastNav: (options.lastNav === undefined) ? false : options.lastNav @@ -23575,7 +23648,17 @@ var MultiView = Backbone.View.extend({ }, this), this.navEventDebounce, true); }, + lock: function() { + this.locked = true; + }, + + unlock: function() { + this.locked = false; + }, + navForward: function() { + // we need to prevent nav changes when a git demonstration view hasnt finished + if (this.locked) { return; } if (this.currentIndex === this.childViews.length - 1) { this.hideViewIndex(this.currentIndex); this.finish(); @@ -23646,6 +23729,9 @@ var MultiView = Backbone.View.extend({ showLeft: (index !== 0), lastNav: (index === this.childViewJSONs.length - 1) }); + if (view.receiveMetaNav) { + view.receiveMetaNav(leftRight, this); + } }, render: function() { diff --git a/src/js/views/gitDemonstrationView.js b/src/js/views/gitDemonstrationView.js index c7284dc9..80495c90 100644 --- a/src/js/views/gitDemonstrationView.js +++ b/src/js/views/gitDemonstrationView.js @@ -75,12 +75,16 @@ var GitDemonstrationView = ContainedBase.extend({ } }, + receiveMetaNav: function(navView, metaContainerView) { + var _this = this; + navView.navEvents.on('positive', this.positive, this); + this.metaContainerView = metaContainerView; + }, + checkScroll: function() { - console.log('checking scroll'); var children = this.$('div.demonstrationText').children(); var heights = _.map(children, function(child) { return child.clientHeight; }); var totalHeight = _.reduce(heights, function(a, b) { return a + b; }); - console.log(children, heights, totalHeight); if (totalHeight < this.$('div.demonstrationText').height()) { this.$('div.demonstrationText').addClass('noLongText'); } @@ -103,12 +107,16 @@ var GitDemonstrationView = ContainedBase.extend({ takeControl: function() { this.hasControl = true; this.keyboardListener.listen(); + + if (this.metaContainerView) { this.metaContainerView.lock(); } }, releaseControl: function() { if (!this.hasControl) { return; } this.hasControl = false; this.keyboardListener.mute(); + + if (this.metaContainerView) { this.metaContainerView.unlock(); } }, reset: function() { @@ -119,11 +127,17 @@ var GitDemonstrationView = ContainedBase.extend({ }, positive: function() { - if (this.demonstrated) { + if (this.demonstrated || !this.hasControl) { + // dont do anything if we are demonstrating, and if + // we receive a meta nav event and we aren't listening, + // then dont do anything either return; } this.demonstrated = true; + this.demonstrate(); + }, + demonstrate: function() { this.$el.toggleClass('demonstrating', true); var whenDone = Q.defer(); diff --git a/src/js/views/index.js b/src/js/views/index.js index 664c078c..374cbf06 100644 --- a/src/js/views/index.js +++ b/src/js/views/index.js @@ -146,13 +146,29 @@ var LeftRightView = PositiveNegativeBase.extend({ 'click .right': 'positive' }, + positive: function() { + this.pipeEvents.trigger('positive'); + LeftRightView.__super__.positive.apply(this); + }, + + negative: function() { + this.pipeEvents.trigger('negative'); + LeftRightView.__super__.negative.apply(this); + }, + initialize: function(options) { if (!options.destination || !options.events) { throw new Error('needmore'); } this.destination = options.destination; - this.navEvents = options.events; + + // we switch to a system where every leftrightview has its own + // events system to add support for git demonstration view taking control of the + // click events + this.pipeEvents = options.events; + this.navEvents = _.clone(Backbone.Events); + this.JSON = { showLeft: (options.showLeft === undefined) ? true : options.showLeft, lastNav: (options.lastNav === undefined) ? false : options.lastNav diff --git a/src/js/views/multiView.js b/src/js/views/multiView.js index d1575624..cf2183a3 100644 --- a/src/js/views/multiView.js +++ b/src/js/views/multiView.js @@ -95,7 +95,17 @@ var MultiView = Backbone.View.extend({ }, this), this.navEventDebounce, true); }, + lock: function() { + this.locked = true; + }, + + unlock: function() { + this.locked = false; + }, + navForward: function() { + // we need to prevent nav changes when a git demonstration view hasnt finished + if (this.locked) { return; } if (this.currentIndex === this.childViews.length - 1) { this.hideViewIndex(this.currentIndex); this.finish(); @@ -166,6 +176,9 @@ var MultiView = Backbone.View.extend({ showLeft: (index !== 0), lastNav: (index === this.childViewJSONs.length - 1) }); + if (view.receiveMetaNav) { + view.receiveMetaNav(leftRight, this); + } }, render: function() { diff --git a/todo.txt b/todo.txt index 213110a2..3efd8123 100644 --- a/todo.txt +++ b/todo.txt @@ -6,8 +6,6 @@ Big Things Medium things: ~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ ] get automated SHA hash appending in the html source :OOOOO... template? or what?t -[ ] text grabber for commands -[ ] turn off button clicking for demonstration view :O Cases to handle / things to edit @@ -34,6 +32,8 @@ Ideas for cleaning Done things: (I only started this on Dec 17th 2012 to get a better sense of what was done) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[x] turn off button clicking for demonstration view :O +[x] text grabber for commands [x] way to close testing view [x] allow demonstration view to have git commands beforehand [x] demonstration builder progress