|
|
//----------------------------------------------------------------------------
|
|
|
// 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.
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
//============================================================================
|
|
|
// MenuBar
|
|
|
//============================================================================
|
|
|
|
|
|
/**
|
|
|
* @module IPython
|
|
|
* @namespace IPython
|
|
|
* @submodule MenuBar
|
|
|
*/
|
|
|
|
|
|
|
|
|
var IPython = (function (IPython) {
|
|
|
|
|
|
/**
|
|
|
* A MenuBar Class to generate the menubar of IPython noteboko
|
|
|
* @Class MenuBar
|
|
|
*
|
|
|
* @constructor
|
|
|
*
|
|
|
*
|
|
|
* @param selector {string} selector for the menubar element in DOM
|
|
|
* @param {object} [options]
|
|
|
* @param [options.baseProjectUrl] {String} String to use for the
|
|
|
* Base Project url, default would be to inspect
|
|
|
* $('body').data('baseProjectUrl');
|
|
|
* does not support change for now is set through this option
|
|
|
*/
|
|
|
var MenuBar = function (selector, options) {
|
|
|
var options = options || {};
|
|
|
if(options.baseProjectUrl!= undefined){
|
|
|
this._baseProjectUrl = options.baseProjectUrl;
|
|
|
}
|
|
|
this.selector = selector;
|
|
|
if (this.selector !== undefined) {
|
|
|
this.element = $(selector);
|
|
|
this.style();
|
|
|
this.bind_events();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
MenuBar.prototype.baseProjectUrl = function(){
|
|
|
return this._baseProjectUrl || $('body').data('baseProjectUrl');
|
|
|
};
|
|
|
|
|
|
|
|
|
MenuBar.prototype.style = function () {
|
|
|
this.element.addClass('border-box-sizing');
|
|
|
$('ul#menus').menubar({
|
|
|
select : function (event, ui) {
|
|
|
// The selected cell loses focus when the menu is entered, so we
|
|
|
// re-select it upon selection.
|
|
|
var i = IPython.notebook.get_selected_index();
|
|
|
IPython.notebook.select(i);
|
|
|
}
|
|
|
});
|
|
|
this.element.find("#restore_checkpoint").find("ul").find("li").hide();
|
|
|
};
|
|
|
|
|
|
|
|
|
MenuBar.prototype.bind_events = function () {
|
|
|
// File
|
|
|
var that = this;
|
|
|
this.element.find('#new_notebook').click(function () {
|
|
|
window.open(that.baseProjectUrl()+'new');
|
|
|
});
|
|
|
this.element.find('#open_notebook').click(function () {
|
|
|
window.open(that.baseProjectUrl());
|
|
|
});
|
|
|
this.element.find('#rename_notebook').click(function () {
|
|
|
IPython.save_widget.rename_notebook();
|
|
|
});
|
|
|
this.element.find('#copy_notebook').click(function () {
|
|
|
var notebook_id = IPython.notebook.get_notebook_id();
|
|
|
var url = that.baseProjectUrl() + notebook_id + '/copy';
|
|
|
window.open(url,'_blank');
|
|
|
return false;
|
|
|
});
|
|
|
this.element.find('#save_checkpoint').click(function () {
|
|
|
IPython.notebook.save_checkpoint();
|
|
|
});
|
|
|
this.element.find('#restore_checkpoint').click(function () {
|
|
|
});
|
|
|
this.element.find('#download_ipynb').click(function () {
|
|
|
var notebook_id = IPython.notebook.get_notebook_id();
|
|
|
var url = that.baseProjectUrl() + 'notebooks/' +
|
|
|
notebook_id + '?format=json';
|
|
|
window.location.assign(url);
|
|
|
});
|
|
|
this.element.find('#download_py').click(function () {
|
|
|
var notebook_id = IPython.notebook.get_notebook_id();
|
|
|
var url = that.baseProjectUrl() + 'notebooks/' +
|
|
|
notebook_id + '?format=py';
|
|
|
window.location.assign(url);
|
|
|
});
|
|
|
this.element.find('#kill_and_exit').click(function () {
|
|
|
IPython.notebook.kernel.kill();
|
|
|
setTimeout(function(){window.close();}, 200);
|
|
|
});
|
|
|
// Edit
|
|
|
this.element.find('#cut_cell').click(function () {
|
|
|
IPython.notebook.cut_cell();
|
|
|
});
|
|
|
this.element.find('#copy_cell').click(function () {
|
|
|
IPython.notebook.copy_cell();
|
|
|
});
|
|
|
this.element.find('#delete_cell').click(function () {
|
|
|
IPython.notebook.delete_cell();
|
|
|
});
|
|
|
this.element.find('#undelete_cell').click(function () {
|
|
|
IPython.notebook.undelete();
|
|
|
});
|
|
|
this.element.find('#split_cell').click(function () {
|
|
|
IPython.notebook.split_cell();
|
|
|
});
|
|
|
this.element.find('#merge_cell_above').click(function () {
|
|
|
IPython.notebook.merge_cell_above();
|
|
|
});
|
|
|
this.element.find('#merge_cell_below').click(function () {
|
|
|
IPython.notebook.merge_cell_below();
|
|
|
});
|
|
|
this.element.find('#move_cell_up').click(function () {
|
|
|
IPython.notebook.move_cell_up();
|
|
|
});
|
|
|
this.element.find('#move_cell_down').click(function () {
|
|
|
IPython.notebook.move_cell_down();
|
|
|
});
|
|
|
this.element.find('#select_previous').click(function () {
|
|
|
IPython.notebook.select_prev();
|
|
|
});
|
|
|
this.element.find('#select_next').click(function () {
|
|
|
IPython.notebook.select_next();
|
|
|
});
|
|
|
// View
|
|
|
this.element.find('#toggle_header').click(function () {
|
|
|
$('div#header').toggle();
|
|
|
IPython.layout_manager.do_resize();
|
|
|
});
|
|
|
this.element.find('#toggle_toolbar').click(function () {
|
|
|
IPython.toolbar.toggle();
|
|
|
});
|
|
|
// Insert
|
|
|
this.element.find('#insert_cell_above').click(function () {
|
|
|
IPython.notebook.insert_cell_above('code');
|
|
|
});
|
|
|
this.element.find('#insert_cell_below').click(function () {
|
|
|
IPython.notebook.insert_cell_below('code');
|
|
|
});
|
|
|
// Cell
|
|
|
this.element.find('#run_cell').click(function () {
|
|
|
IPython.notebook.execute_selected_cell();
|
|
|
});
|
|
|
this.element.find('#run_cell_in_place').click(function () {
|
|
|
IPython.notebook.execute_selected_cell({terminal:true});
|
|
|
});
|
|
|
this.element.find('#run_all_cells').click(function () {
|
|
|
IPython.notebook.execute_all_cells();
|
|
|
}).attr('title', 'Run all cells in the notebook');
|
|
|
this.element.find('#run_all_cells_above').click(function () {
|
|
|
IPython.notebook.execute_cells_above();
|
|
|
}).attr('title', 'Run all cells above (but not including) this cell');
|
|
|
this.element.find('#run_all_cells_below').click(function () {
|
|
|
IPython.notebook.execute_cells_below();
|
|
|
}).attr('title', 'Run this cell and all cells below it');
|
|
|
this.element.find('#to_code').click(function () {
|
|
|
IPython.notebook.to_code();
|
|
|
});
|
|
|
this.element.find('#to_markdown').click(function () {
|
|
|
IPython.notebook.to_markdown();
|
|
|
});
|
|
|
this.element.find('#to_raw').click(function () {
|
|
|
IPython.notebook.to_raw();
|
|
|
});
|
|
|
this.element.find('#to_heading1').click(function () {
|
|
|
IPython.notebook.to_heading(undefined, 1);
|
|
|
});
|
|
|
this.element.find('#to_heading2').click(function () {
|
|
|
IPython.notebook.to_heading(undefined, 2);
|
|
|
});
|
|
|
this.element.find('#to_heading3').click(function () {
|
|
|
IPython.notebook.to_heading(undefined, 3);
|
|
|
});
|
|
|
this.element.find('#to_heading4').click(function () {
|
|
|
IPython.notebook.to_heading(undefined, 4);
|
|
|
});
|
|
|
this.element.find('#to_heading5').click(function () {
|
|
|
IPython.notebook.to_heading(undefined, 5);
|
|
|
});
|
|
|
this.element.find('#to_heading6').click(function () {
|
|
|
IPython.notebook.to_heading(undefined, 6);
|
|
|
});
|
|
|
this.element.find('#toggle_output').click(function () {
|
|
|
IPython.notebook.toggle_output();
|
|
|
});
|
|
|
this.element.find('#collapse_all_output').click(function () {
|
|
|
IPython.notebook.collapse_all_output();
|
|
|
});
|
|
|
this.element.find('#scroll_all_output').click(function () {
|
|
|
IPython.notebook.scroll_all_output();
|
|
|
});
|
|
|
this.element.find('#expand_all_output').click(function () {
|
|
|
IPython.notebook.expand_all_output();
|
|
|
});
|
|
|
this.element.find('#clear_all_output').click(function () {
|
|
|
IPython.notebook.clear_all_output();
|
|
|
});
|
|
|
// Kernel
|
|
|
this.element.find('#int_kernel').click(function () {
|
|
|
IPython.notebook.kernel.interrupt();
|
|
|
});
|
|
|
this.element.find('#restart_kernel').click(function () {
|
|
|
IPython.notebook.restart_kernel();
|
|
|
});
|
|
|
// Help
|
|
|
this.element.find('#keyboard_shortcuts').click(function () {
|
|
|
IPython.quick_help.show_keyboard_shortcuts();
|
|
|
});
|
|
|
|
|
|
this.update_restore_checkpoint(null);
|
|
|
|
|
|
$([IPython.events]).on('checkpoints_listed.Notebook', function (event, data) {
|
|
|
that.update_restore_checkpoint(data);
|
|
|
});
|
|
|
|
|
|
$([IPython.events]).on('checkpoint_created.Notebook', function (event, data) {
|
|
|
that.update_restore_checkpoint([data]);
|
|
|
});
|
|
|
};
|
|
|
|
|
|
MenuBar.prototype.update_restore_checkpoint = function(checkpoints) {
|
|
|
if (! checkpoints) {
|
|
|
checkpoints = [];
|
|
|
};
|
|
|
this.element.find("#restore_checkpoint").find("ul").find("li").each(function(i) {
|
|
|
var li = $(this);
|
|
|
var a = li.find("a");
|
|
|
a.off("click");
|
|
|
if (checkpoints.length <= i) {
|
|
|
li.hide();
|
|
|
return;
|
|
|
} else {
|
|
|
li.show();
|
|
|
};
|
|
|
var checkpoint = checkpoints[i];
|
|
|
var d = new Date(checkpoint.last_modified);
|
|
|
li.find('a').text(
|
|
|
d.format("mmm dd HH:MM:ss")
|
|
|
).click(function () {
|
|
|
IPython.notebook.restore_checkpoint_dialog(checkpoint);
|
|
|
});
|
|
|
});
|
|
|
};
|
|
|
|
|
|
IPython.MenuBar = MenuBar;
|
|
|
|
|
|
return IPython;
|
|
|
|
|
|
}(IPython));
|
|
|
|