##// END OF EJS Templates
Add support for index.ipynb
Add support for index.ipynb

File last commit:

r15069:d41cf135
r15070:638cb99b
Show More
notebooklist.js
404 lines | 14.0 KiB | application/javascript | JavascriptLexer
Brian E. Granger
More review changes....
r4609 //----------------------------------------------------------------------------
MinRK
add utils.url_path_join...
r13063 // Copyright (C) 2011 The IPython Development Team
Brian E. Granger
More review changes....
r4609 //
// Distributed under the terms of the BSD License. The full license is in
// the file COPYING, distributed as part of this software.
//----------------------------------------------------------------------------
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488
//============================================================================
Brian E. Granger
More review changes....
r4609 // NotebookList
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 //============================================================================
var IPython = (function (IPython) {
MinRK
add utils.url_path_join...
r13063 "use strict";
var utils = IPython.utils;
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488
var NotebookList = function (selector) {
this.selector = selector;
if (this.selector !== undefined) {
this.element = $(selector);
this.style();
this.bind_events();
}
MinRK
add utils.url_path_join...
r13063 this.notebooks_list = [];
this.sessions = {};
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 };
Bussonnier Matthias
make base project url a method on notebook list
r9502 NotebookList.prototype.baseProjectUrl = function () {
Zachary Sailer
manual rebase static/tree/
r12988 return $('body').data('baseProjectUrl');
};
Zachary Sailer
allow spaces in notebook path
r13012
Zachary Sailer
manual rebase static/tree/
r12988 NotebookList.prototype.notebookPath = function() {
MinRK
add utils.url_path_join...
r13063 return $('body').data('notebookPath');
Zachary Sailer
manual rebase static/tree/
r12988 };
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 NotebookList.prototype.style = function () {
Brian Granger
Draft of the cluster list UI....
r6195 $('#notebook_toolbar').addClass('list_toolbar');
$('#drag_info').addClass('toolbar_info');
$('#notebook_buttons').addClass('toolbar_buttons');
MinRK
use row-fluid for tree_list
r10919 $('#notebook_list_header').addClass('list_header');
MinRK
use row-fluid for cluster list
r10920 this.element.addClass("list_container");
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 };
NotebookList.prototype.bind_events = function () {
Brian E. Granger
File upload/import working from notebook browser.
r4491 var that = this;
Brian Granger
Draft of the cluster list UI....
r6195 $('#refresh_notebook_list').click(function () {
that.load_list();
});
Brian E. Granger
File upload/import working from notebook browser.
r4491 this.element.bind('dragover', function () {
return false;
});
Matthias BUSSONNIER
alternate notebook upload methods...
r6838 this.element.bind('drop', function(event){
Matthias BUSSONNIER
remove extra console.log
r6851 that.handelFilesUpload(event,'drop');
Brian E. Granger
File upload/import working from notebook browser.
r4491 return false;
});
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 };
Matthias BUSSONNIER
alternate notebook upload methods...
r6838 NotebookList.prototype.handelFilesUpload = function(event, dropOrForm) {
var that = this;
var files;
if(dropOrForm =='drop'){
files = event.originalEvent.dataTransfer.files;
} else
{
MinRK
add utils.url_path_join...
r13063 files = event.originalEvent.target.files;
Matthias BUSSONNIER
alternate notebook upload methods...
r6838 }
MinRK
add utils.url_path_join...
r13063 for (var i = 0; i < files.length; i++) {
var f = files[i];
Matthias BUSSONNIER
alternate notebook upload methods...
r6838 var reader = new FileReader();
reader.readAsText(f);
MinRK
use splitext in notebook_list...
r13121 var name_and_ext = utils.splitext(f.name);
var nbname = name_and_ext[0];
Matthias BUSSONNIER
fix notebook upload...
r13322 var file_ext = name_and_ext[1];
MinRK
use splitext in notebook_list...
r13121 if (file_ext === '.ipynb') {
Matthias BUSSONNIER
alternate notebook upload methods...
r6838 var item = that.new_notebook_item(0);
that.add_name_input(nbname, 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);
};
Brian E. Granger
Fully removing .py file upload....
r13115 } else {
var dialog = 'Uploaded notebooks must be .ipynb files';
IPython.dialog.modal({
title : 'Invalid file type',
body : dialog,
buttons : {'OK' : {'class' : 'btn-primary'}}
});
MinRK
add utils.url_path_join...
r13063 }
Matthias BUSSONNIER
alternate notebook upload methods...
r6838 }
Brian E. Granger
Reset file upload form after an upload.
r14926 // 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));
Matthias BUSSONNIER
alternate notebook upload methods...
r6838 return false;
MinRK
add utils.url_path_join...
r13063 };
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488
Brian Granger
Draft of the cluster list UI....
r6195 NotebookList.prototype.clear_list = function () {
this.element.children('.list_item').remove();
Matthias BUSSONNIER
pep8
r7941 };
Brian Granger
Draft of the cluster list UI....
r6195
Zachary Sailer
manual rebase static/tree/
r12988 NotebookList.prototype.load_sessions = function(){
Zachary Sailer
fixed shutdown button refresh on dashboard
r12996 var that = this;
Zachary Sailer
manual rebase static/tree/
r12988 var settings = {
processData : false,
cache : false,
type : "GET",
dataType : "json",
Zachary Sailer
fixed shutdown button refresh on dashboard
r12996 success : $.proxy(that.sessions_loaded, this)
Zachary Sailer
manual rebase static/tree/
r12988 };
var url = this.baseProjectUrl() + 'api/sessions';
$.ajax(url,settings);
};
NotebookList.prototype.sessions_loaded = function(data){
MinRK
add utils.url_path_join...
r13063 this.sessions = {};
Zachary Sailer
manual rebase static/tree/
r12988 var len = data.length;
MinRK
add utils.url_path_join...
r13063 if (len > 0) {
Zachary Sailer
manual rebase static/tree/
r12988 for (var i=0; i<len; i++) {
MinRK
mixup notebook_list
r13069 var nb_path;
MinRK
add utils.url_path_join...
r13063 if (!data[i].notebook.path) {
nb_path = data[i].notebook.name;
Zachary Sailer
manual rebase static/tree/
r12988 }
else {
MinRK
add utils.url_path_join...
r13063 nb_path = utils.url_path_join(
data[i].notebook.path,
data[i].notebook.name
);
Zachary Sailer
manual rebase static/tree/
r12988 }
MinRK
add utils.url_path_join...
r13063 this.sessions[nb_path] = data[i].id;
Zachary Sailer
manual rebase static/tree/
r12988 }
MinRK
add utils.url_path_join...
r13063 }
Zachary Sailer
manual rebase static/tree/
r12988 this.load_list();
};
Brian Granger
Draft of the cluster list UI....
r6195
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 NotebookList.prototype.load_list = function () {
Matthias BUSSONNIER
show message on notebook list if server is unreachable...
r7881 var that = this;
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 var settings = {
processData : false,
cache : false,
type : "GET",
dataType : "json",
Matthias BUSSONNIER
show message on notebook list if server is unreachable...
r7881 success : $.proxy(this.list_loaded, this),
Matthias BUSSONNIER
pep8
r7941 error : $.proxy( function(){
that.list_loaded([], null, null, {msg:"Error connecting to server."});
},this)
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 };
Matthias BUSSONNIER
show message on notebook list if server is unreachable...
r7881
MinRK
make sure to encode URL components for API requests...
r13693 var url = utils.url_join_encode(
MinRK
add utils.url_path_join...
r13063 this.baseProjectUrl(),
'api',
'notebooks',
this.notebookPath()
);
Brian E. Granger
Updating JS URL scheme to use embedded data....
r5106 $.ajax(url, settings);
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 };
Matthias BUSSONNIER
show message on notebook list if server is unreachable...
r7881 NotebookList.prototype.list_loaded = function (data, status, xhr, param) {
MinRK
handle undefined param in notebooklist...
r7976 var message = 'Notebook list empty.';
if (param !== undefined && param.msg) {
MinRK
add utils.url_path_join...
r13063 message = param.msg;
MinRK
handle undefined param in notebooklist...
r7976 }
Brian E. Granger
Server side logic for directories.
r15069 console.log(data);
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 var len = data.length;
Matthias BUSSONNIER
proof of concept
r6842 this.clear_list();
MinRK
add utils.url_path_join...
r13063 if (len === 0) {
Matthias BUSSONNIER
Drag target bigger for empty notebook dashboard...
r6857 $(this.new_notebook_item(0))
.append(
$('<div style="margin:auto;text-align:center;color:grey"/>')
Matthias BUSSONNIER
show message on notebook list if server is unreachable...
r7881 .text(message)
MinRK
add utils.url_path_join...
r13063 );
Matthias BUSSONNIER
Drag target bigger for empty notebook dashboard...
r6857 }
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 for (var i=0; i<len; i++) {
Zachary Sailer
change standard money keys
r13015 var name = data[i].name;
Zachary Sailer
manual rebase static/tree/
r12988 var path = this.notebookPath();
MinRK
use splitext in notebook_list...
r13121 var nbname = utils.splitext(name)[0];
Brian E. Granger
File upload/import working from notebook browser.
r4491 var item = this.new_notebook_item(i);
Zachary Sailer
manual rebase static/tree/
r12988 this.add_link(path, nbname, item);
MinRK
make sure to encode URL components for API requests...
r13693 name = utils.url_path_join(path, name);
MinRK
add utils.url_path_join...
r13063 if(this.sessions[name] === undefined){
MinRK
remove notebook read-only view...
r11644 this.add_delete_button(item);
} else {
Zachary Sailer
manual rebase static/tree/
r12988 this.add_shutdown_button(item,this.sessions[name]);
MinRK
add read-only view for notebooks...
r5200 }
MinRK
add utils.url_path_join...
r13063 }
Brian E. Granger
File upload/import working from notebook browser.
r4491 };
Brian E. Granger
Implemented delete functionality in nb browser....
r4490
Brian E. Granger
File upload/import working from notebook browser.
r4491
NotebookList.prototype.new_notebook_item = function (index) {
MinRK
use row-fluid for tree_list
r10919 var item = $('<div/>').addClass("list_item").addClass("row-fluid");
MinRK
bootstrap tree
r10891 // item.addClass('list_item ui-widget ui-widget-content ui-helper-clearfix');
// item.css('border-top-style','none');
MinRK
use row-fluid for tree_list
r10919 item.append($("<div/>").addClass("span12").append(
$("<a/>").addClass("item_link").append(
MinRK
bootstrap tree
r10891 $("<span/>").addClass("item_name")
)
MinRK
use row-fluid for tree_list
r10919 ).append(
$('<div/>').addClass("item_buttons btn-group pull-right")
));
MinRK
bootstrap tree
r10891
Brian E. Granger
File upload/import working from notebook browser.
r4491 if (index === -1) {
Brian E. Granger
Implemented delete functionality in nb browser....
r4490 this.element.append(item);
Brian E. Granger
File upload/import working from notebook browser.
r4491 } else {
this.element.children().eq(index).after(item);
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 }
Brian E. Granger
File upload/import working from notebook browser.
r4491 return item;
};
Zachary Sailer
manual rebase static/tree/
r12988 NotebookList.prototype.add_link = function (path, nbname, item) {
Brian E. Granger
File upload/import working from notebook browser.
r4491 item.data('nbname', nbname);
Zachary Sailer
manual rebase static/tree/
r12988 item.data('path', path);
MinRK
use row-fluid for tree_list
r10919 item.find(".item_name").text(nbname);
item.find("a.item_link")
MinRK
add utils.url_path_join...
r13063 .attr('href',
MinRK
make sure to encode URL components for API requests...
r13693 utils.url_join_encode(
MinRK
add utils.url_path_join...
r13063 this.baseProjectUrl(),
"notebooks",
MinRK
make sure to encode URL components for API requests...
r13693 path,
MinRK
add utils.url_path_join...
r13063 nbname + ".ipynb"
)
).attr('target','_blank');
Brian E. Granger
File upload/import working from notebook browser.
r4491 };
NotebookList.prototype.add_name_input = function (nbname, item) {
item.data('nbname', nbname);
MinRK
use row-fluid for tree_list
r10919 item.find(".item_name").empty().append(
MinRK
tree style tweaks
r10896 $('<input/>')
.addClass("nbname_input")
.attr('value', nbname)
.attr('size', '30')
.attr('type', 'text')
Brian E. Granger
File upload/import working from notebook browser.
r4491 );
};
NotebookList.prototype.add_notebook_data = function (data, item) {
MinRK
fix dashboard upload
r13072 item.data('nbdata', data);
Brian E. Granger
File upload/import working from notebook browser.
r4491 };
Zachary Sailer
manual rebase static/tree/
r12988 NotebookList.prototype.add_shutdown_button = function (item, session) {
Matthias BUSSONNIER
proof of concept
r6842 var that = this;
MinRK
bootstrap tree
r10891 var shutdown_button = $("<button/>").text("Shutdown").addClass("btn btn-mini").
Matthias BUSSONNIER
proof of concept
r6842 click(function (e) {
var settings = {
processData : false,
cache : false,
type : "DELETE",
dataType : "json",
Zachary Sailer
fixed shutdown button refresh on dashboard
r12996 success : function () {
Zachary Sailer
manual rebase static/tree/
r12988 that.load_sessions();
Matthias BUSSONNIER
proof of concept
r6842 }
};
MinRK
make sure to encode URL components for API requests...
r13693 var url = utils.url_join_encode(
MinRK
add utils.url_path_join...
r13063 that.baseProjectUrl(),
'api/sessions',
session
);
Matthias BUSSONNIER
proof of concept
r6842 $.ajax(url, settings);
MinRK
bootstrap tree
r10891 return false;
Matthias BUSSONNIER
proof of concept
r6842 });
MinRK
bootstrap tree
r10891 // var new_buttons = item.find('a'); // shutdown_button;
Matthias BUSSONNIER
some $.html( -> $.text(...
r14634 item.find(".item_buttons").text("").append(shutdown_button);
Matthias BUSSONNIER
proof of concept
r6842 };
Brian E. Granger
File upload/import working from notebook browser.
r4491 NotebookList.prototype.add_delete_button = function (item) {
MinRK
bootstrap tree
r10891 var new_buttons = $('<span/>').addClass("btn-group pull-right");
Matthias BUSSONNIER
fix notebook deletion....
r9787 var notebooklist = this;
MinRK
don't color delete buton
r10936 var delete_button = $("<button/>").text("Delete").addClass("btn btn-mini").
Brian E. Granger
File upload/import working from notebook browser.
r4491 click(function (e) {
// $(this) is the button that was clicked.
var that = $(this);
// We use the nbname and notebook_id from the parent notebook_item element's
// data because the outer scopes values change as we iterate through the loop.
Brian Granger
Draft of the cluster list UI....
r6195 var parent_item = that.parents('div.list_item');
Brian E. Granger
File upload/import working from notebook browser.
r4491 var nbname = parent_item.data('nbname');
MinRK
bootstrapify delete dialog
r10921 var message = 'Are you sure you want to permanently delete the notebook: ' + nbname + '?';
IPython.dialog.modal({
title : "Delete notebook",
body : message,
Brian E. Granger
File upload/import working from notebook browser.
r4491 buttons : {
MinRK
bootstrapify delete dialog
r10921 Delete : {
class: "btn-danger",
click: function() {
var settings = {
processData : false,
cache : false,
type : "DELETE",
dataType : "json",
success : function (data, status, xhr) {
parent_item.remove();
}
};
MinRK
make sure to encode URL components for API requests...
r13693 var url = utils.url_join_encode(
MinRK
add utils.url_path_join...
r13063 notebooklist.baseProjectUrl(),
'api/notebooks',
notebooklist.notebookPath(),
MinRK
make sure to encode URL components for API requests...
r13693 nbname + '.ipynb'
MinRK
add utils.url_path_join...
r13063 );
MinRK
bootstrapify delete dialog
r10921 $.ajax(url, settings);
}
Brian E. Granger
File upload/import working from notebook browser.
r4491 },
MinRK
bootstrapify delete dialog
r10921 Cancel : {}
Brian E. Granger
File upload/import working from notebook browser.
r4491 }
});
MinRK
bootstrap tree
r10891 return false;
Brian E. Granger
File upload/import working from notebook browser.
r4491 });
Matthias BUSSONNIER
some $.html( -> $.text(...
r14634 item.find(".item_buttons").text("").append(delete_button);
Brian E. Granger
File upload/import working from notebook browser.
r4491 };
NotebookList.prototype.add_upload_button = function (item) {
var that = this;
MinRK
tree style tweaks
r10896 var upload_button = $('<button/>').text("Upload")
.addClass('btn btn-primary btn-mini upload_button')
.click(function (e) {
MinRK
update upload and copy...
r13074 var nbname = item.find('.item_name > input').val();
Brian E. Granger
Properly set uploaded notebook path.
r14921 var path = that.notebookPath();
Brian E. Granger
File upload/import working from notebook browser.
r4491 var nbdata = item.data('nbdata');
MinRK
fix dashboard upload
r13072 var content_type = 'application/json';
var model = {
content : JSON.parse(nbdata),
};
Brian E. Granger
File upload/import working from notebook browser.
r4491 var settings = {
processData : false,
cache : false,
Matthias BUSSONNIER
fix notebook upload...
r13322 type : 'PUT',
Brian E. Granger
Improvements to file uploaded, mime types and .py reader....
r4493 dataType : 'json',
MinRK
fix dashboard upload
r13072 data : JSON.stringify(model),
Brian E. Granger
Improvements to file uploaded, mime types and .py reader....
r4493 headers : {'Content-Type': content_type},
Brian E. Granger
File upload/import working from notebook browser.
r4491 success : function (data, status, xhr) {
Brian E. Granger
Properly set uploaded notebook path.
r14921 that.add_link(path, nbname, item);
Brian E. Granger
File upload/import working from notebook browser.
r4491 that.add_delete_button(item);
MinRK
fix dashboard upload
r13072 },
error : function (data, status, xhr) {
console.log(data, status);
Brian E. Granger
File upload/import working from notebook browser.
r4491 }
};
MinRK
make sure to encode URL components for API requests...
r13693 var url = utils.url_join_encode(
MinRK
add utils.url_path_join...
r13063 that.baseProjectUrl(),
MinRK
fix dashboard upload
r13072 'api/notebooks',
MinRK
update upload and copy...
r13074 that.notebookPath(),
nbname + '.ipynb'
MinRK
add utils.url_path_join...
r13063 );
Brian E. Granger
Updating JS URL scheme to use embedded data....
r5106 $.ajax(url, settings);
MinRK
bootstrap tree
r10891 return false;
Brian E. Granger
File upload/import working from notebook browser.
r4491 });
MinRK
tree style tweaks
r10896 var cancel_button = $('<button/>').text("Cancel")
.addClass("btn btn-mini")
.click(function (e) {
console.log('cancel click');
Brian E. Granger
File upload/import working from notebook browser.
r4491 item.remove();
MinRK
bootstrap tree
r10891 return false;
Brian E. Granger
File upload/import working from notebook browser.
r4491 });
MinRK
tree style tweaks
r10896 item.find(".item_buttons").empty()
MinRK
bootstrap tree
r10891 .append(upload_button)
.append(cancel_button);
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 };
Zachary Sailer
Change new/copy URLS to POST requests
r13017 NotebookList.prototype.new_notebook = function(){
var path = this.notebookPath();
MinRK
use `async : false` to avoid pop-up blocker on New / Copy notebook
r13075 var base_project_url = this.baseProjectUrl();
Zachary Sailer
Change new/copy URLS to POST requests
r13017 var settings = {
processData : false,
cache : false,
type : "POST",
dataType : "json",
MinRK
use `async : false` to avoid pop-up blocker on New / Copy notebook
r13075 async : false,
success : function (data, status, xhr) {
MinRK
add utils.url_path_join...
r13063 var notebook_name = data.name;
window.open(
MinRK
make sure to encode URL components for API requests...
r13693 utils.url_join_encode(
MinRK
use `async : false` to avoid pop-up blocker on New / Copy notebook
r13075 base_project_url,
MinRK
add utils.url_path_join...
r13063 'notebooks',
MinRK
mixup notebook_list
r13069 path,
MinRK
add utils.url_path_join...
r13063 notebook_name),
'_blank'
);
MinRK
use `async : false` to avoid pop-up blocker on New / Copy notebook
r13075 }
Zachary Sailer
Change new/copy URLS to POST requests
r13017 };
MinRK
make sure to encode URL components for API requests...
r13693 var url = utils.url_join_encode(
MinRK
use `async : false` to avoid pop-up blocker on New / Copy notebook
r13075 base_project_url,
MinRK
add utils.url_path_join...
r13063 'api/notebooks',
path
);
$.ajax(url, settings);
Zachary Sailer
Change new/copy URLS to POST requests
r13017 };
Zachary Sailer
removed '/new' URL and added POST notebook request
r13016
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 IPython.NotebookList = NotebookList;
return IPython;
}(IPython));