button clicking and left right nav integration for git demonstration view

This commit is contained in:
Peter Cottle 2013-01-10 19:58:31 -08:00
parent 0c4319911e
commit e0c4ac795b
5 changed files with 143 additions and 14 deletions

View file

@ -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();

View file

@ -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

View file

@ -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() {