##// END OF EJS Templates
Fixing minor bugs in nbformat and saving....
Fixing minor bugs in nbformat and saving. * json separator is not ',' to avoid adding extra space at EOL. * vs used throughout nbformat.current. * Cell collapse is properly loaded from notebook.

File last commit:

r5869:86b95fdb
r6032:2eb73056
Show More
notebooklist.js
251 lines | 9.1 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();
}
};
NotebookList.prototype.style = function () {
this.element.addClass('ui-widget ui-widget-content');
$('div#project_name').addClass('ui-widget ui-widget-header');
};
NotebookList.prototype.bind_events = function () {
MinRK
move drag_info show/hide to page.ready, to avoid flouc
r5705 if (IPython.read_only){
return;
}
Brian E. Granger
File upload/import working from notebook browser.
r4491 var that = this;
this.element.bind('dragover', function () {
return false;
});
this.element.bind('drop', function (event) {
var files = event.originalEvent.dataTransfer.files;
for (var i = 0, f; f = files[i]; i++) {
var reader = new FileReader();
reader.readAsText(f);
var fname = f.name.split('.');
Brian E. Granger
Notebook upload handles filenames with periods.
r4636 var nbname = fname.slice(0,-1).join('.');
var nbformat = fname.slice(-1)[0];
Brian E. Granger
Making JSON the default .ipynb format.
r4633 if (nbformat === 'ipynb') {nbformat = 'json';};
if (nbformat === 'py' || nbformat === 'json') {
Brian E. Granger
File upload/import working from notebook browser.
r4491 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 };
NotebookList.prototype.load_list = function () {
var settings = {
processData : false,
cache : false,
type : "GET",
dataType : "json",
Brian E. Granger
File upload/import working from notebook browser.
r4491 success : $.proxy(this.list_loaded, this)
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 };
Stefan van der Walt
Clean up javascript based on js2-mode feedback.
r5479 var url = $('body').data('baseProjectUrl') + 'notebooks';
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 };
NotebookList.prototype.list_loaded = function (data, status, xhr) {
var len = data.length;
Brian E. Granger
File upload/import working from notebook browser.
r4491 // Todo: remove old children
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 for (var i=0; i<len; i++) {
Brian E. Granger
Implemented delete functionality in nb browser....
r4490 var notebook_id = data[i].notebook_id;
var nbname = data[i].name;
Brian E. Granger
File upload/import working from notebook browser.
r4491 var item = this.new_notebook_item(i);
this.add_link(notebook_id, nbname, item);
MinRK
move read_only flag to page-level...
r5213 if (!IPython.read_only){
MinRK
add read-only view for notebooks...
r5200 // hide delete buttons when readonly
this.add_delete_button(item);
}
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) {
var item = $('<div/>');
item.addClass('notebook_item ui-widget ui-widget-content ui-helper-clearfix');
var item_name = $('<span/>').addClass('item_name');
item.append(item_name);
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;
};
NotebookList.prototype.add_link = function (notebook_id, nbname, item) {
item.data('nbname', nbname);
item.data('notebook_id', notebook_id);
var new_item_name = $('<span/>').addClass('item_name');
new_item_name.append(
$('<a/>').
Brian Granger
Solid first go at jquery-ui based menus.
r5869 attr('href', $('body').data('baseProjectUrl')+notebook_id).
Brian E. Granger
File upload/import working from notebook browser.
r4491 attr('target','_blank').
text(nbname)
);
var e = item.find('.item_name');
if (e.length === 0) {
item.append(new_item_name);
} else {
e.replaceWith(new_item_name);
};
};
NotebookList.prototype.add_name_input = function (nbname, item) {
item.data('nbname', nbname);
var new_item_name = $('<span/>').addClass('item_name');
new_item_name.append(
$('<input/>').addClass('ui-widget ui-widget-content').
attr('value', nbname).
attr('size', '30').
attr('type', 'text')
);
var e = item.find('.item_name');
if (e.length === 0) {
item.append(new_item_name);
} else {
e.replaceWith(new_item_name);
};
};
NotebookList.prototype.add_notebook_data = function (data, item) {
item.data('nbdata',data);
};
NotebookList.prototype.add_delete_button = function (item) {
var new_buttons = $('<span/>').addClass('item_buttons');
var delete_button = $('<button>Delete</button>').button().
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.
var parent_item = that.parents('div.notebook_item');
var nbname = parent_item.data('nbname');
var notebook_id = parent_item.data('notebook_id');
var dialog = $('<div/>');
dialog.html('Are you sure you want to permanently delete the notebook: ' + nbname + '?');
parent_item.append(dialog);
dialog.dialog({
resizable: false,
modal: true,
title: "Delete notebook",
buttons : {
"Delete": function () {
var settings = {
processData : false,
cache : false,
type : "DELETE",
dataType : "json",
success : function (data, status, xhr) {
parent_item.remove();
}
};
Stefan van der Walt
Clean up javascript based on js2-mode feedback.
r5479 var url = $('body').data('baseProjectUrl') + 'notebooks/' + notebook_id;
Brian E. Granger
Updating JS URL scheme to use embedded data....
r5106 $.ajax(url, settings);
Brian E. Granger
File upload/import working from notebook browser.
r4491 $(this).dialog('close');
},
"Cancel": function () {
$(this).dialog('close');
}
}
});
});
new_buttons.append(delete_button);
var e = item.find('.item_buttons');
if (e.length === 0) {
item.append(new_buttons);
} else {
e.replaceWith(new_buttons);
};
};
NotebookList.prototype.add_upload_button = function (item) {
var that = this;
var new_buttons = $('<span/>').addClass('item_buttons');
var upload_button = $('<button>Upload</button>').button().
click(function (e) {
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});
Stefan van der Walt
Clean up javascript based on js2-mode feedback.
r5479 var url = $('body').data('baseProjectUrl') + 'notebooks?' + qs;
Brian E. Granger
Updating JS URL scheme to use embedded data....
r5106 $.ajax(url, settings);
Brian E. Granger
File upload/import working from notebook browser.
r4491 });
var cancel_button = $('<button>Cancel</button>').button().
click(function (e) {
item.remove();
});
upload_button.addClass('upload_button');
new_buttons.append(upload_button).append(cancel_button);
var e = item.find('.item_buttons');
if (e.length === 0) {
item.append(new_buttons);
} else {
e.replaceWith(new_buttons);
};
Brian E. Granger
Implemented basic notebook browser and fixed numerous bugs.
r4488 };
IPython.NotebookList = NotebookList;
return IPython;
}(IPython));