import export tree done

This commit is contained in:
Peter Cottle 2013-01-13 11:09:21 -08:00
parent aa9cfea3a4
commit 45aa088796
6 changed files with 262 additions and 34 deletions

View file

@ -13,8 +13,9 @@ var Command = require('../models/commandModel').Command;
var GitShim = require('../git/gitShim').GitShim;
var Views = require('../views');
var ModalTerminal = require('../views').ModalTerminal;
var ModalAlert = require('../views').ModalAlert;
var ModalTerminal = Views.ModalTerminal;
var ModalAlert = Views.ModalAlert;
var BuilderViews = require('../views/builderViews');
var MultiView = require('../views/multiView').MultiView;
var Sandbox = Backbone.View.extend({
@ -191,6 +192,8 @@ var Sandbox = Backbone.View.extend({
},
processSandboxCommand: function(command, deferred) {
// I'm tempted to do camcel case conversion, but there are
// some exceptions to the rule
var commandMap = {
'reset solved': this.resetSolved,
'help general': this.helpDialog,
@ -203,7 +206,9 @@ var Sandbox = Backbone.View.extend({
'sandbox': this.exitLevel,
'levels': this.showLevels,
'iosAlert': this.iosAlert,
'build level': this.buildLevel
'build level': this.buildLevel,
'export tree': this.exportTree,
'import tree': this.importTree
};
var method = commandMap[command.get('method')];
@ -224,6 +229,59 @@ var Sandbox = Backbone.View.extend({
this.mainVis.show();
},
importTree: function(command, deferred) {
var jsonGrabber = new BuilderViews.MarkdownPresenter({
previewText: "Paste a tree JSON blob below!",
fillerText: ' '
});
jsonGrabber.deferred.promise
.then(_.bind(function(treeJSON) {
try {
this.mainVis.gitEngine.loadTree(JSON.parse(treeJSON));
} catch(e) {
this.mainVis.reset();
new MultiView({
childViews: [{
type: 'ModalAlert',
options: {
markdowns: [
'## Error!',
'',
'Something is wrong with that JSON! Here is the error:',
'',
String(e)
]
}
}]
});
}
}, this))
.fail(function() { })
.done(function() {
command.finishWith(deferred);
});
},
exportTree: function(command, deferred) {
var treeJSON = JSON.stringify(this.mainVis.gitEngine.exportTree(), null, 2);
var showJSON = new MultiView({
childViews: [{
type: 'MarkdownPresenter',
options: {
previewText: 'Share this tree with friends! They can load it with "import tree"',
fillerText: treeJSON,
noConfirmCancel: true
}
}]
});
showJSON.getPromise()
.then(function() {
command.finishWith(deferred);
})
.done();
},
clear: function(command, deferred) {
Main.getEvents().trigger('clearOldCommands');
if (command && deferred) {

View file

@ -54,7 +54,9 @@ var regexMap = {
'level': /^level\s?([a-zA-Z0-9]*)/,
'levels': /^levels($|\s)/,
'iosAlert': /^iOS alert($|\s)/,
'build level': /^build level($|\s)/
'build level': /^build level($|\s)/,
'export tree': /^export tree$/,
'import tree': /^import tree$/
};
exports.instantCommands = instantCommands;

View file

@ -140,6 +140,7 @@ var MarkdownPresenter = ContainedBase.extend({
initialize: function(options) {
options = options || {};
this.deferred = options.deferred || Q.defer();
this.JSON = {
previewText: options.previewText || 'Here is something for you',
fillerText: options.fillerText || '# Yay'
@ -150,14 +151,25 @@ var MarkdownPresenter = ContainedBase.extend({
});
this.render();
var confirmCancel = new Views.ConfirmCancelView({
destination: this.getDestination()
});
confirmCancel.deferred.promise
.fail(function() { })
.done(_.bind(this.die, this));
if (!options.noConfirmCancel) {
var confirmCancel = new Views.ConfirmCancelView({
destination: this.getDestination()
});
confirmCancel.deferred.promise
.then(_.bind(function() {
this.deferred.resolve(this.grabText());
}, this))
.fail(_.bind(function() {
this.deferred.reject();
}, this))
.done(_.bind(this.die, this));
}
this.show();
},
grabText: function() {
return this.$('textarea').val();
}
});

View file

@ -10,6 +10,9 @@ var LeftRightView = require('../views').LeftRightView;
var ModalAlert = require('../views').ModalAlert;
var GitDemonstrationView = require('../views/gitDemonstrationView').GitDemonstrationView;
var BuilderViews = require('../views/builderViews');
var MarkdownPresenter = BuilderViews.MarkdownPresenter;
var KeyboardListener = require('../util/keyboard').KeyboardListener;
var GitError = require('../util/errors').GitError;
@ -23,7 +26,8 @@ var MultiView = Backbone.View.extend({
// a simple mapping of what childViews we support
typeToConstructor: {
ModalAlert: ModalAlert,
GitDemonstrationView: GitDemonstrationView
GitDemonstrationView: GitDemonstrationView,
MarkdownPresenter: MarkdownPresenter
},
initialize: function(options) {