// Copyright (c) IPython Development Team. // Distributed under the terms of the Modified BSD License. define([ 'base/js/namespace', 'jquery', 'base/js/utils', 'base/js/dialog', ], function(IPython, $, utils, dialog) { var Contents = function(options) { // 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 this.base_url = options.base_url; }; 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); }; /** * File Functions (including notebook operations) */ /** * Load a file. * * Calls success_callback with file JSON model, or error_callback with error. * * @method load_notebook * @param {String} path * @param {String} name * @param {Function} success_callback * @param {Function} error_callback */ Contents.prototype.load_file = function (path, name, options) { // We do the call with settings so we can set cache to false. var settings = { processData : false, cache : false, type : "GET", dataType : "json", success : options.success_callback, error : options.error_callback || function() {} }; var url = this.api_url(path, name); $.ajax(url, settings); }; /** * Creates a new notebook file at the specified directory path. * * @method scroll_to_cell * @param {String} path The path to create the new notebook at */ Contents.prototype.new_notebook = function(path, options) { var error_callback = options.error_callback || function() {}; var settings = { processData : false, cache : false, type : "POST", dataType : "json", success : options.success_callback || function() {}, error : options.error_callback || function() {} }; $.ajax(this.api_url(path), settings); }; Contents.prototype.delete_file = function(name, path, options) { var error_callback = options.error_callback || function() {}; var that = this; var settings = { processData : false, cache : false, type : "DELETE", dataType : "json", success : options.success_callback || function() {}, error : function(xhr, status, error) { utils.log_ajax_error(xhr, status, error); error_callback(xhr, status, error); } }; var url = this.api_url(path, name); $.ajax(url, settings); }; Contents.prototype.rename_file = function(path, name, new_path, new_name, options) { var data = {name: new_name, path: new_path}; var settings = { processData : false, cache : false, type : "PATCH", data : JSON.stringify(data), dataType: "json", contentType: 'application/json', success : options.success_callback || function() {}, error : options.error_callback || function() {} }; var url = this.api_url(path, name); $.ajax(url, settings); }; Contents.prototype.save_file = function(path, name, model, options) { // 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), contentType: 'application/json', success : options.success_callback || function() {}, error : options.error_callback || function() {} }; if (options.extra_settings) { $.extend(settings, options.extra_settings); } var url = this.api_url(path, name); $.ajax(url, settings); }; /** * Checkpointing Functions */ Contents.prototype.create_checkpoint = function(path, name, options) { var url = this.api_url(path, name, 'checkpoints'); var settings = { type : "POST", success: options.success_callback || function() {}, error: options.error_callback || function() {} }; $.ajax(url, settings); }; Contents.prototype.list_checkpoints = function(path, name, options) { var url = this.api_url(path, name, 'checkpoints'); var settings = { type : "GET", success: options.success_callback, error: options.error_callback || function() {} }; $.ajax(url, settings); }; Contents.prototype.restore_checkpoint = function(path, name, checkpoint_id, options) { var url = this.api_url(path, name, 'checkpoints', checkpoint_id); var settings = { type : "POST", success: options.success_callback || function() {}, error: options.error_callback || function() {} }; $.ajax(url, settings); }; Contents.prototype.delete_checkpoint = function(path, name, checkpoint_id, options) { var url = this.api_url(path, name, 'checkpoints', checkpoint_id); var settings = { type : "DELETE", success: options.success_callback || function() {}, error: options.error_callback || function() {} }; $.ajax(url, settings); }; /** * 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" * name: the name of the file or directory * created: created date * last_modified: last modified dat * path: the path * @method list_notebooks * @param {String} path The path to list notebooks in * @param {Function} load_callback called with list of notebooks on success * @param {Function} error_callback called with ajax results on error */ Contents.prototype.list_contents = function(path, options) { var settings = { processData : false, cache : false, type : "GET", dataType : "json", success : options.success_callback, error : options.error_callback || function() {} }; $.ajax(this.api_url(path), settings); }; IPython.Contents = Contents; return {'Contents': Contents}; });