contentmanager.js
196 lines
| 6.2 KiB
| application/javascript
|
JavascriptLexer
jhemmelg
|
r18618 | // Copyright (c) IPython Development Team. | ||
// Distributed under the terms of the Modified BSD License. | ||||
define([ | ||||
'base/js/namespace', | ||||
'jquery', | ||||
KesterTong
|
r18620 | 'base/js/utils', | ||
KesterTong
|
r18623 | 'base/js/dialog', | ||
], function(IPython, $, utils, dialog) { | ||||
KesterTong
|
r18621 | var ContentManager = function(options) { | ||
jhemmelg
|
r18618 | // Constructor | ||
// | ||||
// A contentmanager handles passing file operations | ||||
// to the back-end. This includes checkpointing | ||||
// with the normal file operations. | ||||
// | ||||
// Parameters: | ||||
KesterTong
|
r18621 | // options: dictionary | ||
// Dictionary of keyword arguments. | ||||
KesterTong
|
r18622 | // events: $(Events) instance | ||
KesterTong
|
r18621 | // base_url: string | ||
jhemmelg
|
r18618 | this.version = 0.1; | ||
KesterTong
|
r18622 | this.events = options.events; | ||
KesterTong
|
r18621 | this.base_url = options.base_url; | ||
KesterTong
|
r18620 | }; | ||
KesterTong
|
r18621 | |||
KesterTong
|
r18622 | /** | ||
* Creates a new notebook file at the specified path, and | ||||
* opens that notebook in a new window. | ||||
* | ||||
* @method scroll_to_cell | ||||
* @param {String} path The path to create the new notebook at | ||||
*/ | ||||
ContentManager.prototype.new_notebook = function(path) { | ||||
jhemmelg
|
r18619 | var base_url = this.base_url; | ||
var settings = { | ||||
processData : false, | ||||
cache : false, | ||||
type : "POST", | ||||
dataType : "json", | ||||
async : false, | ||||
success : function (data, status, xhr){ | ||||
var notebook_name = data.name; | ||||
window.open( | ||||
utils.url_join_encode( | ||||
base_url, | ||||
'notebooks', | ||||
path, | ||||
notebook_name | ||||
), | ||||
'_blank' | ||||
); | ||||
}, | ||||
KesterTong
|
r18623 | error : function(xhr, status, error) { | ||
utils.log_ajax_error(xhr, status, error); | ||||
var msg; | ||||
if (xhr.responseJSON && xhr.responseJSON.message) { | ||||
msg = xhr.responseJSON.message; | ||||
} else { | ||||
msg = xhr.statusText; | ||||
} | ||||
dialog.modal({ | ||||
title : 'Creating Notebook Failed', | ||||
body : "The error was: " + msg, | ||||
buttons : {'OK' : {'class' : 'btn-primary'}} | ||||
}); | ||||
} | ||||
jhemmelg
|
r18619 | }; | ||
var url = utils.url_join_encode( | ||||
base_url, | ||||
'api/notebooks', | ||||
path | ||||
); | ||||
$.ajax(url,settings); | ||||
KesterTong
|
r18620 | }; | ||
jhemmelg
|
r18618 | |||
Jeff Hemmelgarn
|
r18625 | ContentManager.prototype.delete_notebook = function(name, path, base_url) { | ||
jhemmelg
|
r18619 | var settings = { | ||
processData : false, | ||||
cache : false, | ||||
type : "DELETE", | ||||
dataType: "json", | ||||
error : utils.log_ajax_error, | ||||
}; | ||||
var url = utils.url_join_encode( | ||||
Jeff Hemmelgarn
|
r18625 | base_url, | ||
jhemmelg
|
r18619 | 'api/notebooks', | ||
Jeff Hemmelgarn
|
r18625 | path, | ||
name | ||||
jhemmelg
|
r18619 | ); | ||
$.ajax(url, settings); | ||||
KesterTong
|
r18620 | }; | ||
jhemmelg
|
r18618 | |||
jhemmelg
|
r18619 | ContentManager.prototype.rename_notebook = function(notebook, nbname) { | ||
var that = notebook; | ||||
if (!nbname.match(/\.ipynb$/)) { | ||||
nbname = nbname + ".ipynb"; | ||||
} | ||||
var data = {name: nbname}; | ||||
var settings = { | ||||
processData : false, | ||||
cache : false, | ||||
type : "PATCH", | ||||
data : JSON.stringify(data), | ||||
dataType: "json", | ||||
Jeff Hemmelgarn
|
r18627 | contentType: 'application/json', | ||
success : $.proxy(that.rename_success, that), | ||||
error : $.proxy(that.rename_error, that) | ||||
jhemmelg
|
r18619 | }; | ||
this.events.trigger('rename_notebook.Notebook', data); | ||||
var url = utils.url_join_encode( | ||||
Jeff Hemmelgarn
|
r18627 | that.base_url, | ||
jhemmelg
|
r18619 | 'api/notebooks', | ||
Jeff Hemmelgarn
|
r18627 | that.notebook_path, | ||
that.notebook_name | ||||
jhemmelg
|
r18619 | ); | ||
$.ajax(url, settings); | ||||
KesterTong
|
r18620 | }; | ||
jhemmelg
|
r18618 | |||
ContentManager.prototype.save_notebook = function(notebook, extra_settings) { | ||||
jhemmelg
|
r18619 | // Create a JSON model to be sent to the server. | ||
var model = {}; | ||||
model.name = notebook.notebook_name; | ||||
model.path = notebook.notebook_path; | ||||
model.content = notebook.toJSON(); | ||||
model.content.nbformat = notebook.nbformat; | ||||
model.content.nbformat_minor = notebook.nbformat_minor; | ||||
// time the ajax call for autosave tuning purposes. | ||||
var start = new Date().getTime(); | ||||
// We do the call with settings so we can set cache to false. | ||||
var settings = { | ||||
processData : false, | ||||
cache : false, | ||||
type : "PUT", | ||||
data : JSON.stringify(model), | ||||
Jeff Hemmelgarn
|
r18627 | contentType: 'application/json', | ||
jhemmelg
|
r18619 | success : $.proxy(notebook.save_notebook_success, this, start), | ||
error : $.proxy(notebook.save_notebook_error, this) | ||||
}; | ||||
if (extra_settings) { | ||||
for (var key in extra_settings) { | ||||
settings[key] = extra_settings[key]; | ||||
} | ||||
} | ||||
notebook.events.trigger('notebook_saving.Notebook'); | ||||
var url = utils.url_join_encode( | ||||
notebook.base_url, | ||||
'api/notebooks', | ||||
notebook.notebook_path, | ||||
notebook.notebook_name | ||||
); | ||||
$.ajax(url, settings); | ||||
}; | ||||
jhemmelg
|
r18618 | |||
ContentManager.prototype.save_checkpoint = function() { | ||||
jhemmelg
|
r18619 | // This is not necessary - integrated into save | ||
KesterTong
|
r18620 | }; | ||
jhemmelg
|
r18618 | |||
jhemmelg
|
r18619 | ContentManager.prototype.restore_checkpoint = function(notebook, id) { | ||
that = notebook; | ||||
this.events.trigger('notebook_restoring.Notebook', checkpoint); | ||||
var url = utils.url_join_encode( | ||||
this.base_url, | ||||
'api/notebooks', | ||||
this.notebook_path, | ||||
this.notebook_name, | ||||
'checkpoints', | ||||
checkpoint | ||||
); | ||||
$.post(url).done( | ||||
$.proxy(that.restore_checkpoint_success, that) | ||||
).fail( | ||||
$.proxy(that.restore_checkpoint_error, that) | ||||
); | ||||
KesterTong
|
r18620 | }; | ||
jhemmelg
|
r18618 | |||
jhemmelg
|
r18619 | ContentManager.prototype.list_checkpoints = function(notebook) { | ||
that = notebook; | ||||
var url = utils.url_join_encode( | ||||
that.base_url, | ||||
'api/notebooks', | ||||
that.notebook_path, | ||||
that.notebook_name, | ||||
'checkpoints' | ||||
); | ||||
$.get(url).done( | ||||
$.proxy(that.list_checkpoints_success, that) | ||||
).fail( | ||||
$.proxy(that.list_checkpoints_error, that) | ||||
); | ||||
KesterTong
|
r18620 | }; | ||
IPython.ContentManager = ContentManager; | ||||
jhemmelg
|
r18618 | |||
KesterTong
|
r18620 | return {'ContentManager': ContentManager}; | ||
jhemmelg
|
r18618 | }); | ||