##// END OF EJS Templates
refactoring of nbmanager and filenbmanager...
refactoring of nbmanager and filenbmanager major clean up of the two managers. We make sure to follow the standard models described in IPEP 16

File last commit:

r13046:116db313
r13046:116db313
Show More
notebooklist.js
355 lines | 12.6 KiB | application/javascript | JavascriptLexer
Brian E. Granger
More review changes....
r4609 //----------------------------------------------------------------------------
// Copyright (C) 2008-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.
//----------------------------------------------------------------------------
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) {
var NotebookList = function (selector) {
this.selector = selector;
if (this.selector !== undefined) {
this.element = $(selector);
this.style();
this.bind_events();
}
Zachary Sailer
manual rebase static/tree/
r12988 this.notebooks_list = new Array();
this.sessions = new Object();
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() {
var path = $('body').data('notebookPath');
Zachary Sailer
path with spaces completely fixed
r13013 path = decodeURIComponent(path);
Zachary Sailer
fixing broken links from recent changes....
r13033 return path;
Zachary Sailer
manual rebase static/tree/
r12988 };
NotebookList.prototype.url_name = function(name){
return encodeURIComponent(name);
Bussonnier Matthias
make base project url a method on notebook list
r9502 };
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
{
files = event.originalEvent.target.files
}
for (var i = 0, f; f = files[i]; i++) {
var reader = new FileReader();
reader.readAsText(f);
var fname = f.name.split('.');
var nbname = fname.slice(0,-1).join('.');
var nbformat = fname.slice(-1)[0];
if (nbformat === 'ipynb') {nbformat = 'json';};
if (nbformat === 'py' || nbformat === 'json') {
var item = that.new_notebook_item(0);
that.add_name_input(nbname, item);
item.data('nbformat', nbformat);
// 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);
};
};
}
return false;
};
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){
Zachary Sailer
fixed shutdown button refresh on dashboard
r12996 this.sessions = new Object();
Zachary Sailer
manual rebase static/tree/
r12988 var len = data.length;
if (len != 0) {
for (var i=0; i<len; i++) {
Zachary Sailer
change standard money keys
r13015 if (data[i]['path']==null) {
nb_path = data[i]['name'];
Zachary Sailer
manual rebase static/tree/
r12988 }
else {
Zachary Sailer
change standard money keys
r13015 nb_path = data[i]['path'] + data[i]['name'];
Zachary Sailer
manual rebase static/tree/
r12988 }
Zachary Sailer
change standard money keys
r13015 this.sessions[nb_path]= data[i]['id'];
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
Zachary Sailer
fixing broken links from recent changes....
r13033 var url = 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) {
var message = param.msg;
}
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();
Matthias BUSSONNIER
Drag target bigger for empty notebook dashboard...
r6857 if(len == 0)
{
$(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)
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();
var nbname = name.split(".")[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);
name = this.notebookPath() + name;
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 }
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")
Zachary Sailer
fixing broken links from recent changes....
r13033 .attr('href', this.baseProjectUrl() + "notebooks" + this.notebookPath() + nbname + ".ipynb")
MinRK
use row-fluid for tree_list
r10919 .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) {
item.data('nbdata',data);
};
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 }
};
Zachary Sailer
manual rebase static/tree/
r12988 var url = 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;
item.find(".item_buttons").html("").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();
}
};
Zachary Sailer
fixing broken links from recent changes....
r13033 var url = notebooklist.baseProjectUrl() + 'api/notebooks' + notebooklist.notebookPath() + nbname + '.ipynb';
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 });
MinRK
bootstrap tree
r10891 item.find(".item_buttons").html("").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) {
Brian E. Granger
File upload/import working from notebook browser.
r4491 var nbname = item.find('.item_name > input').attr('value');
var nbformat = item.data('nbformat');
var nbdata = item.data('nbdata');
Brian E. Granger
Improvements to file uploaded, mime types and .py reader....
r4493 var content_type = 'text/plain';
Brian E. Granger
Making JSON the default .ipynb format.
r4633 if (nbformat === 'json') {
Brian E. Granger
Improvements to file uploaded, mime types and .py reader....
r4493 content_type = 'application/json';
} else if (nbformat === 'py') {
content_type = 'application/x-python';
};
Brian E. Granger
File upload/import working from notebook browser.
r4491 var settings = {
processData : false,
cache : false,
Brian E. Granger
Improvements to file uploaded, mime types and .py reader....
r4493 type : 'POST',
dataType : 'json',
Brian E. Granger
File upload/import working from notebook browser.
r4491 data : nbdata,
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) {
that.add_link(data, nbname, item);
that.add_delete_button(item);
}
};
var qs = $.param({name:nbname, format:nbformat});
Matthias BUSSONNIER
fix baseUrl
r9699 var url = that.baseProjectUrl() + 'notebooks?' + qs;
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();
var settings = {
processData : false,
cache : false,
type : "POST",
dataType : "json",
success:$.proxy(function (data, status, xhr){
notebook_name = data.name;
Zachary Sailer
fixing broken links from recent changes....
r13033 window.open(this.baseProjectUrl() +'notebooks' + this.notebookPath()+ notebook_name, '_blank');
Zachary Sailer
Change new/copy URLS to POST requests
r13017 }, this)
};
Zachary Sailer
refactoring of nbmanager and filenbmanager...
r13046 var url = this.baseProjectUrl() + 'api/notebooks' + path;
Zachary Sailer
Change new/copy URLS to POST requests
r13017 $.ajax(url,settings);
};
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));