All aboard the promise train

This commit is contained in:
Thomas Kluyver 2014-11-13 12:17:49 -08:00
parent 6b85afb077
commit aecb4bffa5
5 changed files with 77 additions and 99 deletions

View File

@ -92,14 +92,13 @@ define([
// Create a new notebook in the same path as the current
// notebook's path.
var parent = utils.url_path_split(that.notebook.notebook_path)[0];
that.contents.new_untitled(parent, {
type: "notebook",
success: function (data) {
that.contents.new_untitled(parent, {type: "notebook"}).then(
function (data) {
w.location = utils.url_join_encode(
that.base_url, 'notebooks', data.path
);
},
error: function(error) {
},
function(error) {
w.close();
dialog.modal({
title : 'Creating Notebook Failed',
@ -107,7 +106,7 @@ define([
buttons : {'OK' : {'class' : 'btn-primary'}}
});
}
});
);
});
this.element.find('#open_notebook').click(function () {
var parent = utils.url_path_split(that.notebook.notebook_path)[0];

View File

@ -1902,12 +1902,12 @@ define([
var start = new Date().getTime();
var that = this;
this.contents.save(this.notebook_path, model, {
success: $.proxy(this.save_notebook_success, this, start),
error: function (error) {
this.contents.save(this.notebook_path, model).then(
$.proxy(this.save_notebook_success, this, start),
function (error) {
that.events.trigger('notebook_save_failed.Notebook', error);
}
});
);
};
/**
@ -2025,17 +2025,17 @@ define([
var base_url = this.base_url;
var w = window.open();
var parent = utils.url_path_split(this.notebook_path)[0];
this.contents.copy(this.notebook_path, parent, {
success: function (data) {
this.contents.copy(this.notebook_path, parent).then(
function (data) {
w.location = utils.url_join_encode(
base_url, 'notebooks', data.path
);
},
error : function(error) {
function(error) {
w.close();
console.log(error);
},
});
}
);
};
Notebook.prototype.rename = function (new_name) {
@ -2046,15 +2046,15 @@ define([
var that = this;
var parent = utils.url_path_split(this.notebook_path)[0];
var new_path = utils.url_path_join(parent, new_name);
this.contents.rename(this.notebook_path, new_path, {
success: function (json) {
this.contents.rename(this.notebook_path, new_path).then(
function (json) {
that.notebook_name = json.name;
that.notebook_path = json.path;
that.session.rename_notebook(json.path);
that.events.trigger('notebook_renamed.Notebook', json);
},
error: $.proxy(this.rename_error, this)
});
$.proxy(this.rename_error, this)
);
};
Notebook.prototype.delete = function () {
@ -2326,12 +2326,12 @@ define([
*/
Notebook.prototype.list_checkpoints = function () {
var that = this;
this.contents.list_checkpoints(this.notebook_path, {
success: $.proxy(this.list_checkpoints_success, this),
error: function(error) {
this.contents.list_checkpoints(this.notebook_path).then(
$.proxy(this.list_checkpoints_success, this),
function(error) {
that.events.trigger('list_checkpoints_failed.Notebook', error);
}
});
);
};
/**
@ -2358,12 +2358,12 @@ define([
*/
Notebook.prototype.create_checkpoint = function () {
var that = this;
this.contents.create_checkpoint(this.notebook_path, {
success: $.proxy(this.create_checkpoint_success, this),
error: function (error) {
this.contents.create_checkpoint(this.notebook_path).then(
$.proxy(this.create_checkpoint_success, this),
function (error) {
that.events.trigger('checkpoint_failed.Notebook', error);
}
});
);
};
/**
@ -2428,13 +2428,12 @@ define([
Notebook.prototype.restore_checkpoint = function (checkpoint) {
this.events.trigger('notebook_restoring.Notebook', checkpoint);
var that = this;
this.contents.restore_checkpoint(this.notebook_path,
checkpoint, {
success: $.proxy(this.restore_checkpoint_success, this),
error: function (error) {
this.contents.restore_checkpoint(this.notebook_path, checkpoint).then(
$.proxy(this.restore_checkpoint_success, this),
function (error) {
that.events.trigger('checkpoint_restore_failed.Notebook', error);
}
});
);
};
/**
@ -2456,13 +2455,12 @@ define([
Notebook.prototype.delete_checkpoint = function (checkpoint) {
this.events.trigger('notebook_restoring.Notebook', checkpoint);
var that = this;
this.contents.delete_checkpoint(this.notebook_path,
checkpoint, {
success: $.proxy(this.delete_checkpoint_success, this),
error: function (error) {
this.contents.delete_checkpoint(this.notebook_path, checkpoint).then(
$.proxy(this.delete_checkpoint_success, this),
function (error) {
that.events.trigger('checkpoint_delete_failed.Notebook', error);
}
});
);
};
/**

View File

@ -112,33 +112,31 @@ define([
type : "POST",
data: data,
dataType : "json",
success : options.success || function() {},
error : this.create_basic_error_handler(options.error)
};
$.ajax(this.api_url(path), settings);
return utils.promising_ajax(this.api_url(path), settings);
};
Contents.prototype.delete = function(path, options) {
var error_callback = options.error || function() {};
Contents.prototype.delete = function(path) {
var settings = {
processData : false,
type : "DELETE",
dataType : "json",
success : options.success || function() {},
error : function(xhr, status, error) {
// TODO: update IPEP27 to specify errors more precisely, so
// that error types can be detected here with certainty.
if (xhr.status === 400) {
error_callback(new Contents.DirectoryNotEmptyError());
}
error_callback(utils.wrap_ajax_error(xhr, status, error));
}
};
var url = this.api_url(path);
$.ajax(url, settings);
return utils.promising_ajax(url, settings).catch(
// Translate certain errors to more specific ones.
function(error) {
// TODO: update IPEP27 to specify errors more precisely, so
// that error types can be detected here with certainty.
if (error.xhr.status === 400) {
return Promise.reject(new Contents.DirectoryNotEmptyError());
}
return Promise.reject(error);
}
);
};
Contents.prototype.rename = function(path, new_path, options) {
Contents.prototype.rename = function(path, new_path) {
var data = {path: new_path};
var settings = {
processData : false,
@ -146,28 +144,24 @@ define([
data : JSON.stringify(data),
dataType: "json",
contentType: 'application/json',
success : options.success || function() {},
error : this.create_basic_error_handler(options.error)
};
var url = this.api_url(path);
$.ajax(url, settings);
return utils.promising_ajax(url, settings);
};
Contents.prototype.save = function(path, model, options) {
Contents.prototype.save = function(path, model) {
// We do the call with settings so we can set cache to false.
var settings = {
processData : false,
type : "PUT",
data : JSON.stringify(model),
contentType: 'application/json',
success : options.success || function() {},
error : this.create_basic_error_handler(options.error)
};
var url = this.api_url(path);
$.ajax(url, settings);
return utils.promising_ajax(url, settings);
};
Contents.prototype.copy = function(from_file, to_dir, options) {
Contents.prototype.copy = function(from_file, to_dir) {
// Copy a file into a given directory via POST
// The server will select the name of the copied file
var url = this.api_url(to_dir);
@ -177,54 +171,44 @@ define([
type: "POST",
data: JSON.stringify({copy_from: from_file}),
dataType : "json",
success: options.success || function() {},
error: this.create_basic_error_handler(options.error)
};
$.ajax(url, settings);
return utils.promising_ajax(url, settings);
};
/**
* Checkpointing Functions
*/
Contents.prototype.create_checkpoint = function(path, options) {
Contents.prototype.create_checkpoint = function(path) {
var url = this.api_url(path, 'checkpoints');
var settings = {
type : "POST",
success: options.success || function() {},
error : this.create_basic_error_handler(options.error)
};
$.ajax(url, settings);
return utils.promising_ajax(url, settings);
};
Contents.prototype.list_checkpoints = function(path, options) {
Contents.prototype.list_checkpoints = function(path) {
var url = this.api_url(path, 'checkpoints');
var settings = {
type : "GET",
success: options.success,
error : this.create_basic_error_handler(options.error)
};
$.ajax(url, settings);
return utils.promising_ajax(url, settings);
};
Contents.prototype.restore_checkpoint = function(path, checkpoint_id, options) {
Contents.prototype.restore_checkpoint = function(path, checkpoint_id) {
var url = this.api_url(path, 'checkpoints', checkpoint_id);
var settings = {
type : "POST",
success: options.success || function() {},
error : this.create_basic_error_handler(options.error)
};
$.ajax(url, settings);
return utils.promising_ajax(url, settings);
};
Contents.prototype.delete_checkpoint = function(path, checkpoint_id, options) {
Contents.prototype.delete_checkpoint = function(path, checkpoint_id) {
var url = this.api_url(path, 'checkpoints', checkpoint_id);
var settings = {
type : "DELETE",
success: options.success || function() {},
error : this.create_basic_error_handler(options.error)
};
$.ajax(url, settings);
return utils.promising_ajax(url, settings);
};
/**

View File

@ -65,14 +65,13 @@ require([
$('#new_notebook').click(function (e) {
var w = window.open();
contents.new_untitled(common_options.notebook_path, {
type: "notebook",
success: function (data) {
contents.new_untitled(common_options.notebook_path, {type: "notebook"}).then(
function (data) {
w.location = utils.url_join_encode(
common_options.base_url, 'notebooks', data.path
);
},
error: function(error) {
},
function(error) {
w.close();
dialog.modal({
title : 'Creating Notebook Failed',
@ -80,7 +79,7 @@ require([
buttons : {'OK' : {'class' : 'btn-primary'}}
});
}
});
);
});
var interval_id=0;

View File

@ -328,11 +328,11 @@ define([
Delete : {
class: "btn-danger",
click: function() {
notebooklist.contents.delete(path, {
success: function() {
notebooklist.contents.delete(path).then(
function() {
notebooklist.notebook_deleted(path);
}
});
);
}
},
Cancel : {}
@ -414,13 +414,11 @@ define([
}
filedata = item.data('filedata');
var settings = {
success : function () {
item.removeClass('new-file');
that.add_link(model, item);
that.add_delete_button(item);
that.session_list.load_sessions();
},
var on_success = function () {
item.removeClass('new-file');
that.add_link(model, item);
that.add_delete_button(item);
that.session_list.load_sessions();
};
var exists = false;
@ -436,8 +434,8 @@ define([
Overwrite : {
class: "btn-danger",
click: function () {
that.contents.save(path, model, settings);
}
that.contents.save(path, model).then(on_success);
}
},
Cancel : {
click: function() { item.remove(); }
@ -445,7 +443,7 @@ define([
}
});
} else {
that.contents.save(path, model, settings);
that.contents.save(path, model).then(on_success);
}
return false;