makes other vis now too

This commit is contained in:
Peter Cottle 2013-05-26 15:18:36 -07:00
parent 9173e75c1a
commit 29d401e701
4 changed files with 147 additions and 18 deletions

View file

@ -19,7 +19,7 @@ function GitEngine(options) {
this.refs = {};
this.HEAD = null;
this.origin = null;
this.localRepo = options.localRepro;
this.localRepo = null;
this.branchCollection = options.branches;
this.commitCollection = options.collection;
@ -49,6 +49,10 @@ GitEngine.prototype.initUniqueID = function() {
})();
};
GitEngine.prototype.assignLocalRepo = function(repo) {
this.localRepo = repo;
};
GitEngine.prototype.defaultInit = function() {
var defaultTree = this.getDefaultTree();
this.loadTree(defaultTree);
@ -80,7 +84,7 @@ GitEngine.prototype.hasOrigin = function() {
};
GitEngine.prototype.isOrigin = function() {
return false;
return !!this.localRepro;
};
GitEngine.prototype.exportTree = function() {
@ -192,11 +196,26 @@ GitEngine.prototype.instantiateFromTree = function(tree) {
};
GitEngine.prototype.makeOrigin = function(tree) {
this.origin = new GitEngine({
if (this.hasOrigin()) {
throw new GitError({
msg: intl.str('git-error-options')
});
}
// this is super super ugly but a necessary hack because of the way LGB was
// originally designed. We need to get to the top level visualization from
// the git engine -- aka we need to access our own visuals, then the
// visualization and ask the main vis to create a new vis/git pair. Then
// we grab the gitengine out of that and assign that as our origin repo
// which connects the two
var masterVis = this.gitVisuals.getVisualization();
var originRepo = masterVis.makeOrigin({
localRepo: this,
// dont let it intercept commands
eventBaton: new EventBaton()
tree: this.getDefaultTree()
});
this.origin = originRepo;
originRepo.assignLocalRepo(this);
};
GitEngine.prototype.getOrMakeRecursive = function(tree, createdSoFar, objID) {

View file

@ -18,6 +18,7 @@ var VisEdgeCollection = require('../visuals/visEdge').VisEdgeCollection;
function GitVisuals(options) {
options = options || {};
this.options = options;
this.visualization = options.visualization;
this.commitCollection = options.commitCollection;
this.branchCollection = options.branchCollection;
this.visNodeMap = {};
@ -91,6 +92,10 @@ GitVisuals.prototype.assignGitEngine = function(gitEngine) {
this.deferFlush();
};
GitVisuals.prototype.getVisualization = function() {
return this.visualization;
};
GitVisuals.prototype.initHeadBranch = function() {
// it's unfortaunte we have to do this, but the head branch
// is an edge case because it's not part of a collection so

View file

@ -49,7 +49,8 @@ var Visualization = Backbone.View.extend({
branchCollection: this.branchCollection,
paper: this.paper,
noClick: this.options.noClick,
smallCanvas: this.options.smallCanvas
smallCanvas: this.options.smallCanvas,
visualization: this
});
var GitEngine = require('../git').GitEngine;
@ -85,6 +86,24 @@ var Visualization = Backbone.View.extend({
this.customEvents.trigger('paperReady');
},
makeOrigin: function(options) {
// oh god, here we go. We basically do a bizarre form of composition here,
// where this visualization actually contains another one of itself.
this.originVis = new Visualization(_.extend(
{},
// copy all of our options over, except...
this.options,
{
// never accept keyboard input or clicks
noKeyboardInput: true,
noClick: true,
treeString: JSON.stringify(options.tree)
}
));
// return the newly created gitEngine
return this.originVis.gitEngine;
},
setTreeIndex: function(level) {
$(this.paper.canvas).css('z-index', level);
},