##// END OF EJS Templates
setting an option to null sets the default in CodeMirror...
setting an option to null sets the default in CodeMirror matching the unset behavior in config

File last commit:

r19176:f48e011c
r19311:9c060bc5
Show More
contents.js
250 lines | 7.5 KiB | application/javascript | JavascriptLexer
jhemmelg
Initial interface for javascript contentmanagers...
r18618 // Copyright (c) IPython Development Team.
// Distributed under the terms of the Modified BSD License.
define([
'base/js/namespace',
'jquery',
KesterTong
Style and bug fixes
r18620 'base/js/utils',
Thomas Kluyver
JS Contents API doesn't need dialog module
r18717 ], function(IPython, $, utils) {
Jeff Hemmelgarn
Move contentmanager to contents
r18643 var Contents = function(options) {
Jonathan Frederic
Ran function comment conversion tool
r19176 /**
* Constructor
*
* A contents handles passing file operations
* to the back-end. This includes checkpointing
* with the normal file operations.
*
* Parameters:
* options: dictionary
* Dictionary of keyword arguments.
* base_url: string
*/
KesterTong
Use IPython style constructor
r18621 this.base_url = options.base_url;
KesterTong
Style and bug fixes
r18620 };
Thomas Kluyver
Add Contents.api_url convenience function
r18650
Kester Tong
Modifies Contents API to return Error objects...
r18661 /** Error type */
Contents.DIRECTORY_NOT_EMPTY_ERROR = 'DirectoryNotEmptyError';
Contents.DirectoryNotEmptyError = function() {
// Constructor
//
// An error representing the result of attempting to delete a non-empty
// directory.
this.message = 'A directory must be empty before being deleted.';
Min RK
update frontend with path/name changes...
r18752 };
Contents.DirectoryNotEmptyError.prototype = Object.create(Error.prototype);
Kester Tong
Modifies Contents API to return Error objects...
r18661 Contents.DirectoryNotEmptyError.prototype.name =
Kester Tong
typo fix
r18662 Contents.DIRECTORY_NOT_EMPTY_ERROR;
Kester Tong
Modifies Contents API to return Error objects...
r18661
Thomas Kluyver
Add Contents.api_url convenience function
r18650 Contents.prototype.api_url = function() {
var url_parts = [this.base_url, 'api/contents'].concat(
Array.prototype.slice.apply(arguments));
return utils.url_join_encode.apply(null, url_parts);
};
KesterTong
Make ContentManager stateless...
r18622 /**
Kester Tong
Modifies Contents API to return Error objects...
r18661 * Creates a basic error handler that wraps a jqXHR error as an Error.
*
* Takes a callback that accepts an Error, and returns a callback that can
* be passed directly to $.ajax, which will wrap the error from jQuery
* as an Error, and pass that to the original callback.
*
* @method create_basic_error_handler
* @param{Function} callback
* @return{Function}
*/
Contents.prototype.create_basic_error_handler = function(callback) {
if (!callback) {
Min RK
update frontend with path/name changes...
r18752 return utils.log_ajax_error;
Kester Tong
Modifies Contents API to return Error objects...
r18661 }
return function(xhr, status, error) {
callback(utils.wrap_ajax_error(xhr, status, error));
};
Min RK
update frontend with path/name changes...
r18752 };
Kester Tong
Modifies Contents API to return Error objects...
r18661
/**
Thomas Kluyver
Make contents JS API consistent
r18653 * File Functions (including notebook operations)
KesterTong
Moves list_notebooks to ContentManager
r18636 */
/**
Min RK
update frontend with path/name changes...
r18752 * Get a file.
KesterTong
Moves load_notebook to ContentManager and adds new_notebook to Google Drive version
r18638 *
Thomas Kluyver
Rename callback parameters to success/error
r18658 * Calls success with file JSON model, or error with error.
KesterTong
Moves load_notebook to ContentManager and adds new_notebook to Google Drive version
r18638 *
Min RK
update frontend with path/name changes...
r18752 * @method get
KesterTong
Moves load_notebook to ContentManager and adds new_notebook to Google Drive version
r18638 * @param {String} path
Thomas Kluyver
Update JS docstrings in contents API
r18840 * @param {Object} options
* type : 'notebook', 'file', or 'directory'
* format: 'text' or 'base64'; only relevant for type: 'file'
KesterTong
Moves load_notebook to ContentManager and adds new_notebook to Google Drive version
r18638 */
Min RK
update frontend with path/name changes...
r18752 Contents.prototype.get = function (path, options) {
Jonathan Frederic
Ran function comment conversion tool
r19176 /**
* We do the call with settings so we can set cache to false.
*/
KesterTong
Moves load_notebook to ContentManager and adds new_notebook to Google Drive version
r18638 var settings = {
processData : false,
cache : false,
type : "GET",
dataType : "json",
};
Min RK
update frontend with path/name changes...
r18752 var url = this.api_url(path);
Thomas Kluyver
Fix various review comments
r18790 params = {};
if (options.type) { params.type = options.type; }
if (options.format) { params.format = options.format; }
Thomas Kluyver
Use promises for GET requests
r18827 return utils.promising_ajax(url + '?' + $.param(params), settings);
KesterTong
Moves load_notebook to ContentManager and adds new_notebook to Google Drive version
r18638 };
/**
Min RK
contents.new_untitled to match Python API
r18760 * Creates a new untitled file or directory in the specified directory path.
KesterTong
Make ContentManager stateless...
r18622 *
Min RK
update frontend with path/name changes...
r18752 * @method new
Min RK
contents.new_untitled to match Python API
r18760 * @param {String} path: the directory in which to create the new file/directory
Thomas Kluyver
Make Contents.new more generic
r18676 * @param {Object} options:
Min RK
update frontend with path/name changes...
r18752 * ext: file extension to use
Min RK
address review in contents service...
r18758 * type: model type to create ('notebook', 'file', or 'directory')
KesterTong
Make ContentManager stateless...
r18622 */
Min RK
contents.new_untitled to match Python API
r18760 Contents.prototype.new_untitled = function(path, options) {
Min RK
address review in contents service...
r18758 var data = JSON.stringify({
ext: options.ext,
type: options.type
});
Thomas Kluyver
Make Contents.new more generic
r18676
jhemmelg
ContentManager function signatures updated
r18619 var settings = {
processData : false,
Min RK
update frontend with path/name changes...
r18752 type : "POST",
Thomas Kluyver
Make Contents.new more generic
r18676 data: data,
jhemmelg
ContentManager function signatures updated
r18619 dataType : "json",
};
Thomas Kluyver
All aboard the promise train
r18829 return utils.promising_ajax(this.api_url(path), settings);
KesterTong
Style and bug fixes
r18620 };
jhemmelg
Initial interface for javascript contentmanagers...
r18618
Thomas Kluyver
All aboard the promise train
r18829 Contents.prototype.delete = function(path) {
jhemmelg
ContentManager function signatures updated
r18619 var settings = {
processData : false,
type : "DELETE",
KesterTong
Removes unnecessary parameter from ContentManager.delete_notebook
r18629 dataType : "json",
Thomas Kluyver
All aboard the promise train
r18829 };
var url = this.api_url(path);
return utils.promising_ajax(url, settings).catch(
// Translate certain errors to more specific ones.
function(error) {
Kester Tong
Modifies Contents API to return Error objects...
r18661 // TODO: update IPEP27 to specify errors more precisely, so
// that error types can be detected here with certainty.
Thomas Kluyver
All aboard the promise train
r18829 if (error.xhr.status === 400) {
Thomas Kluyver
Re-raise errors with throw instead of Promise.reject()
r18837 throw new Contents.DirectoryNotEmptyError();
Kester Tong
Modifies Contents API to return Error objects...
r18661 }
Thomas Kluyver
Re-raise errors with throw instead of Promise.reject()
r18837 throw error;
Thomas Kluyver
Make contents JS API consistent
r18653 }
Thomas Kluyver
All aboard the promise train
r18829 );
KesterTong
Style and bug fixes
r18620 };
jhemmelg
Initial interface for javascript contentmanagers...
r18618
Thomas Kluyver
All aboard the promise train
r18829 Contents.prototype.rename = function(path, new_path) {
Min RK
update frontend with path/name changes...
r18752 var data = {path: new_path};
jhemmelg
ContentManager function signatures updated
r18619 var settings = {
processData : false,
type : "PATCH",
data : JSON.stringify(data),
dataType: "json",
Jeff Hemmelgarn
Move notebook.rename to contentmanager...
r18627 contentType: 'application/json',
jhemmelg
ContentManager function signatures updated
r18619 };
Min RK
update frontend with path/name changes...
r18752 var url = this.api_url(path);
Thomas Kluyver
All aboard the promise train
r18829 return utils.promising_ajax(url, settings);
KesterTong
Style and bug fixes
r18620 };
jhemmelg
Initial interface for javascript contentmanagers...
r18618
Thomas Kluyver
All aboard the promise train
r18829 Contents.prototype.save = function(path, model) {
Jonathan Frederic
Ran function comment conversion tool
r19176 /**
* We do the call with settings so we can set cache to false.
*/
jhemmelg
ContentManager function signatures updated
r18619 var settings = {
processData : false,
type : "PUT",
data : JSON.stringify(model),
Jeff Hemmelgarn
Move notebook.rename to contentmanager...
r18627 contentType: 'application/json',
jhemmelg
ContentManager function signatures updated
r18619 };
Min RK
update frontend with path/name changes...
r18752 var url = this.api_url(path);
Thomas Kluyver
All aboard the promise train
r18829 return utils.promising_ajax(url, settings);
jhemmelg
ContentManager function signatures updated
r18619 };
Thomas Kluyver
Add copy_file to contents JS API
r18665
Thomas Kluyver
All aboard the promise train
r18829 Contents.prototype.copy = function(from_file, to_dir) {
Jonathan Frederic
Ran function comment conversion tool
r19176 /**
* Copy a file into a given directory via POST
* The server will select the name of the copied file
*/
Min RK
update frontend with path/name changes...
r18752 var url = this.api_url(to_dir);
Thomas Kluyver
Add copy_file to contents JS API
r18665
var settings = {
processData : false,
Min RK
update frontend with path/name changes...
r18752 type: "POST",
data: JSON.stringify({copy_from: from_file}),
Thomas Kluyver
Add copy_file to contents JS API
r18665 dataType : "json",
};
Thomas Kluyver
All aboard the promise train
r18829 return utils.promising_ajax(url, settings);
Thomas Kluyver
Add copy_file to contents JS API
r18665 };
jhemmelg
Initial interface for javascript contentmanagers...
r18618
KesterTong
Moves list_notebooks to ContentManager
r18636 /**
* Checkpointing Functions
*/
Thomas Kluyver
All aboard the promise train
r18829 Contents.prototype.create_checkpoint = function(path) {
Min RK
update frontend with path/name changes...
r18752 var url = this.api_url(path, 'checkpoints');
Thomas Kluyver
Standardise JS checkpointing API, use it for notebooks
r18652 var settings = {
type : "POST",
Thomas Kluyver
Return JSON from contents API checkpoint methods
r18830 dataType : "json",
Thomas Kluyver
Standardise JS checkpointing API, use it for notebooks
r18652 };
Thomas Kluyver
All aboard the promise train
r18829 return utils.promising_ajax(url, settings);
KesterTong
Style and bug fixes
r18620 };
jhemmelg
Initial interface for javascript contentmanagers...
r18618
Thomas Kluyver
All aboard the promise train
r18829 Contents.prototype.list_checkpoints = function(path) {
Min RK
update frontend with path/name changes...
r18752 var url = this.api_url(path, 'checkpoints');
Thomas Kluyver
Standardise JS checkpointing API, use it for notebooks
r18652 var settings = {
type : "GET",
Thomas Kluyver
Return JSON from contents API checkpoint methods
r18830 cache: false,
dataType: "json",
Thomas Kluyver
Standardise JS checkpointing API, use it for notebooks
r18652 };
Thomas Kluyver
All aboard the promise train
r18829 return utils.promising_ajax(url, settings);
KesterTong
Style and bug fixes
r18620 };
jhemmelg
Initial interface for javascript contentmanagers...
r18618
Thomas Kluyver
All aboard the promise train
r18829 Contents.prototype.restore_checkpoint = function(path, checkpoint_id) {
Min RK
update frontend with path/name changes...
r18752 var url = this.api_url(path, 'checkpoints', checkpoint_id);
Thomas Kluyver
Standardise JS checkpointing API, use it for notebooks
r18652 var settings = {
type : "POST",
};
Thomas Kluyver
All aboard the promise train
r18829 return utils.promising_ajax(url, settings);
Thomas Kluyver
Standardise JS checkpointing API, use it for notebooks
r18652 };
Thomas Kluyver
All aboard the promise train
r18829 Contents.prototype.delete_checkpoint = function(path, checkpoint_id) {
Min RK
update frontend with path/name changes...
r18752 var url = this.api_url(path, 'checkpoints', checkpoint_id);
Thomas Kluyver
Standardise JS checkpointing API, use it for notebooks
r18652 var settings = {
type : "DELETE",
};
Thomas Kluyver
All aboard the promise train
r18829 return utils.promising_ajax(url, settings);
KesterTong
Style and bug fixes
r18620 };
KesterTong
Moves list_notebooks to ContentManager
r18636 /**
* File management functions
*/
/**
* List notebooks and directories at a given path
*
* On success, load_callback is called with an array of dictionaries
* representing individual files or directories. Each dictionary has
* the keys:
* type: "notebook" or "directory"
* created: created date
* last_modified: last modified dat
* @method list_notebooks
* @param {String} path The path to list notebooks in
*/
Thomas Kluyver
Use promises for GET requests
r18827 Contents.prototype.list_contents = function(path) {
return this.get(path, {type: 'directory'});
Thomas Kluyver
Add missing semicolon
r18647 };
KesterTong
Moves list_notebooks to ContentManager
r18636
Jeff Hemmelgarn
Move contentmanager to contents
r18643 IPython.Contents = Contents;
jhemmelg
Initial interface for javascript contentmanagers...
r18618
Jeff Hemmelgarn
Move contentmanager to contents
r18643 return {'Contents': Contents};
Kester Tong
Modifies Contents API to return Error objects...
r18661 });