//---------------------------------------------------------------------------- // Copyright (C) 2011 The IPython Development Team // // Distributed under the terms of the BSD License. The full license is in // the file COPYING, distributed as part of this software. //---------------------------------------------------------------------------- //============================================================================ // NotebookList //============================================================================ var IPython = (function (IPython) { "use strict"; var utils = IPython.utils; var NotebookList = function (selector, options, element_name) { var that = this // allow code re-use by just changing element_name in kernellist.js this.element_name = element_name || 'notebook'; this.selector = selector; if (this.selector !== undefined) { this.element = $(selector); this.style(); this.bind_events(); } this.notebooks_list = []; this.sessions = {}; this.base_url = options.base_url || utils.get_body_data("baseUrl"); this.notebook_path = options.notebook_path || utils.get_body_data("notebookPath"); $([IPython.events]).on('sessions_loaded.Dashboard', function(e, d) { that.sessions_loaded(d); }); }; NotebookList.prototype.style = function () { var prefix = '#' + this.element_name $(prefix + '_toolbar').addClass('list_toolbar'); $(prefix + '_list_info').addClass('toolbar_info'); $(prefix + '_buttons').addClass('toolbar_buttons'); $(prefix + '_list_header').addClass('list_header'); this.element.addClass("list_container"); }; NotebookList.prototype.bind_events = function () { var that = this; $('#refresh_' + this.element_name + '_list').click(function () { that.load_sessions(); }); this.element.bind('dragover', function () { return false; }); this.element.bind('drop', function(event){ that.handleFilesUpload(event,'drop'); return false; }); }; NotebookList.prototype.handleFilesUpload = function(event, dropOrForm) { var that = this; var files; if(dropOrForm =='drop'){ files = event.originalEvent.dataTransfer.files; } else { files = event.originalEvent.target.files; } for (var i = 0; i < files.length; i++) { var f = files[i]; var reader = new FileReader(); reader.readAsText(f); var name_and_ext = utils.splitext(f.name); var file_ext = name_and_ext[1]; if (file_ext === '.ipynb') { var item = that.new_notebook_item(0); item.addClass('new-file'); that.add_name_input(f.name, item); // Store the notebook item in the reader so we can use it later // to know which item it belongs to. $(reader).data('item', item); reader.onload = function (event) { var nbitem = $(event.target).data('item'); that.add_notebook_data(event.target.result, nbitem); that.add_upload_button(nbitem); }; } else { var dialog = 'Uploaded notebooks must be .ipynb files'; IPython.dialog.modal({ title : 'Invalid file type', body : dialog, buttons : {'OK' : {'class' : 'btn-primary'}} }); } } // Replace the file input form wth a clone of itself. This is required to // reset the form. Otherwise, if you upload a file, delete it and try to // upload it again, the changed event won't fire. var form = $('input.fileinput'); form.replaceWith(form.clone(true)); return false; }; NotebookList.prototype.clear_list = function (remove_uploads) { // Clears the navigation tree. // // Parameters // remove_uploads: bool=False // Should upload prompts also be removed from the tree. if (remove_uploads) { this.element.children('.list_item').remove(); } else { this.element.children('.list_item:not(.new-file)').remove(); } }; NotebookList.prototype.load_sessions = function(){ IPython.session_list.load_sessions(); }; NotebookList.prototype.sessions_loaded = function(data){ this.sessions = data; this.load_list(); }; NotebookList.prototype.load_list = function () { var that = this; var settings = { processData : false, cache : false, type : "GET", dataType : "json", success : $.proxy(this.list_loaded, this), error : $.proxy( function(){ that.list_loaded([], null, null, {msg:"Error connecting to server."}); },this) }; var url = utils.url_join_encode( this.base_url, 'api', 'notebooks', this.notebook_path ); $.ajax(url, settings); }; NotebookList.prototype.list_loaded = function (data, status, xhr, param) { var message = 'Notebook list empty.'; if (param !== undefined && param.msg) { message = param.msg; } var item = null; var len = data.length; this.clear_list(); if (len === 0) { item = this.new_notebook_item(0); var span12 = item.children().first(); span12.empty(); span12.append($('
').text(message)); } var path = this.notebook_path; var offset = 0; if (path !== '') { item = this.new_notebook_item(0); this.add_dir(path, '..', item); offset = 1; } for (var i=0; i').addClass("list_item").addClass("row-fluid"); // item.addClass('list_item ui-widget ui-widget-content ui-helper-clearfix'); // item.css('border-top-style','none'); item.append($("
").addClass("span12").append( $('').addClass('item_icon') ).append( $("").addClass("item_link").append( $("").addClass("item_name") ) ).append( $('
').addClass("item_buttons btn-group pull-right") )); if (index === -1) { this.element.append(item); } else { this.element.children().eq(index).after(item); } return item; }; NotebookList.prototype.add_dir = function (path, name, item) { item.data('name', name); item.data('path', path); item.find(".item_name").text(name); item.find(".item_icon").addClass('icon-folder-open'); item.find("a.item_link") .attr('href', utils.url_join_encode( this.base_url, "tree", path, name ) ); }; NotebookList.prototype.add_link = function (path, nbname, item) { item.data('nbname', nbname); item.data('path', path); item.find(".item_name").text(nbname); item.find(".item_icon").addClass('icon-book'); item.find("a.item_link") .attr('href', utils.url_join_encode( this.base_url, "notebooks", path, nbname ) ).attr('target','_blank'); }; NotebookList.prototype.add_name_input = function (nbname, item) { item.data('nbname', nbname); item.find(".item_icon").addClass('icon-book'); item.find(".item_name").empty().append( $('') .addClass("nbname_input") .attr('value', utils.splitext(nbname)[0]) .attr('size', '30') .attr('type', 'text') ); }; NotebookList.prototype.add_notebook_data = function (data, item) { item.data('nbdata', data); }; NotebookList.prototype.add_shutdown_button = function (item, session) { var that = this; var shutdown_button = $("