##// END OF EJS Templates
Machinery to replace the current cell instead of adding a new one
Machinery to replace the current cell instead of adding a new one

File last commit:

r19179:dc7663cc
r19250:bdae5330
Show More
menubar.js
396 lines | 14.1 KiB | application/javascript | JavascriptLexer
MinRK
support pdf export in the notebook UI
r16266 // Copyright (c) IPython Development Team.
// Distributed under the terms of the Modified BSD License.
Brian Granger
Implemented menu based UI using Wijmo.
r5857
Jonathan Frederic
Almost done!...
r17198 define([
Jonathan Frederic
MWE,...
r17200 'jquery',
Min RK
update frontend with path/name changes...
r18752 'base/js/namespace',
'base/js/dialog',
Jonathan Frederic
Almost done!...
r17198 'base/js/utils',
'notebook/js/tour',
MinRK
add bootstrap shim for require...
r17312 'bootstrap',
Matthias BUSSONNIER
use momentjs for nice dates
r17474 'moment',
Min RK
update frontend with path/name changes...
r18752 ], function($, IPython, dialog, utils, tour, bootstrap, moment) {
Matthias BUSSONNIER
"use strict" in most (if not all) our javascript...
r12103 "use strict";
MinRK
save before download-as...
r13076
jon
In person review with @ellisonbg
r17210 var MenuBar = function (selector, options) {
Jonathan Frederic
Ran function comment conversion tool
r19176 /**
* Constructor
*
* A MenuBar Class to generate the menubar of IPython notebook
*
* Parameters:
* selector: string
* options: dictionary
* Dictionary of keyword arguments.
* notebook: Notebook instance
* contents: ContentManager instance
* events: $(Events) instance
* save_widget: SaveWidget instance
* quick_help: QuickHelp instance
* base_url : string
* notebook_path : string
* notebook_name : string
*/
MinRK
review pass on multidir js
r13103 options = options || {};
Jonathan Frederic
Almost done!...
r17198 this.base_url = options.base_url || utils.get_body_data("baseUrl");
Brian Granger
Implemented menu based UI using Wijmo.
r5857 this.selector = selector;
jon
In person review with @ellisonbg
r17210 this.notebook = options.notebook;
Jeff Hemmelgarn
Move contentmanager to contents
r18643 this.contents = options.contents;
jon
In person review with @ellisonbg
r17210 this.events = options.events;
this.save_widget = options.save_widget;
this.quick_help = options.quick_help;
Jonathan Frederic
Almost done!...
r17198
try {
jon
In person review with @ellisonbg
r17210 this.tour = new tour.Tour(this.notebook, this.events);
Jonathan Frederic
Almost done!...
r17198 } catch (e) {
this.tour = undefined;
console.log("Failed to instantiate Notebook Tour", e);
}
Brian Granger
Implemented menu based UI using Wijmo.
r5857 if (this.selector !== undefined) {
this.element = $(selector);
this.style();
this.bind_events();
}
};
Matthias BUSSONNIER
add TODO
r17439 // TODO: This has definitively nothing to do with style ...
Brian Granger
Implemented menu based UI using Wijmo.
r5857 MenuBar.prototype.style = function () {
Jonathan Frederic
MWE,...
r17200 var that = this;
MinRK
bootstrap menubar
r10888 this.element.find("li").click(function (event, ui) {
Brian Granger
Fixing minor typo in menubar.js.
r5908 // The selected cell loses focus when the menu is entered, so we
Brian Granger
Cell splitting and merging is done!
r5898 // re-select it upon selection.
Jonathan Frederic
MWE,...
r17200 var i = that.notebook.get_selected_index();
that.notebook.select(i);
Brian Granger
Cell splitting and merging is done!
r5898 }
MinRK
bootstrap menubar
r10888 );
Brian Granger
Implemented menu based UI using Wijmo.
r5857 };
Thomas Kluyver
Add menu entries for getting converted views of a notebook
r13829 MenuBar.prototype._nbconvert = function (format, download) {
download = download || false;
Jonathan Frederic
Almost done!...
r17198 var notebook_path = this.notebook.notebook_path;
MinRK
various unicode fixes...
r15234 var url = utils.url_join_encode(
MinRK
s/base_project_url/base_url/...
r15238 this.base_url,
Thomas Kluyver
Add menu entries for getting converted views of a notebook
r13829 'nbconvert',
format,
Thomas Kluyver
Remove trailing comma
r18859 notebook_path
Thomas Kluyver
Add menu entries for getting converted views of a notebook
r13829 ) + "?download=" + download.toString();
Thomas Kluyver
Fix asyncy nbconvert to download
r18969
var w = window.open()
if (this.notebook.dirty) {
this.notebook.save_notebook().then(function() {
w.location = url;
});
} else {
w.location = url;
}
MinRK
various unicode fixes...
r15234 };
Brian Granger
Implemented menu based UI using Wijmo.
r5857
Jonathan Frederic
Kill the layout manager
r19179 MenuBar.prototype._size_header = function() {
/**
* Update header spacer size.
*/
this.events.trigger('resize-header.Page');
};
Brian Granger
Implemented menu based UI using Wijmo.
r5857 MenuBar.prototype.bind_events = function () {
Jonathan Frederic
Ran function comment conversion tool
r19176 /**
* File
*/
Matthias BUSSONNIER
fix baseUrl
r9699 var that = this;
Zachary Sailer
fixing path redirects, cleaning path logic
r12992 this.element.find('#new_notebook').click(function () {
Thomas Kluyver
Open window before creating new notebook...
r18771 var w = window.open();
KesterTong
Replace other methods with ContentManager.new_notebook...
r18624 // Create a new notebook in the same path as the current
// notebook's path.
Min RK
address review in contents service...
r18758 var parent = utils.url_path_split(that.notebook.notebook_path)[0];
Thomas Kluyver
All aboard the promise train
r18829 that.contents.new_untitled(parent, {type: "notebook"}).then(
function (data) {
Thomas Kluyver
Open window before creating new notebook...
r18771 w.location = utils.url_join_encode(
Min RK
update frontend with path/name changes...
r18752 that.base_url, 'notebooks', data.path
Thomas Kluyver
Open window before creating new notebook...
r18771 );
Thomas Kluyver
All aboard the promise train
r18829 },
function(error) {
Thomas Kluyver
Open window before creating new notebook...
r18771 w.close();
Thomas Kluyver
Don't do UI stuff in contents API module
r18649 dialog.modal({
title : 'Creating Notebook Failed',
Kester Tong
Modifies Contents API to return Error objects...
r18661 body : "The error was: " + error.message,
Thomas Kluyver
Don't do UI stuff in contents API module
r18649 buttons : {'OK' : {'class' : 'btn-primary'}}
});
}
Thomas Kluyver
All aboard the promise train
r18829 );
Zachary Sailer
fixing path redirects, cleaning path logic
r12992 });
this.element.find('#open_notebook').click(function () {
Thomas Kluyver
Some fixes for the tree view
r18783 var parent = utils.url_path_split(that.notebook.notebook_path)[0];
window.open(utils.url_join_encode(that.base_url, 'tree', parent));
Zachary Sailer
fixing path redirects, cleaning path logic
r12992 });
this.element.find('#copy_notebook').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.copy_notebook();
Zachary Sailer
fixing path redirects, cleaning path logic
r12992 return false;
});
this.element.find('#download_ipynb').click(function () {
Jonathan Frederic
Almost done!...
r17198 var base_url = that.notebook.base_url;
var notebook_path = that.notebook.notebook_path;
if (that.notebook.dirty) {
that.notebook.save_notebook({async : false});
MinRK
save before download-as...
r13076 }
Thomas Kluyver
Just use notebook_path in download URLs...
r18856 var url = utils.url_join_encode(base_url, 'files', notebook_path);
Min RK
use ?download=1 to trigger download in /files/...
r18556 window.open(url + '?download=1');
Zachary Sailer
fixing path redirects, cleaning path logic
r12992 });
MinRK
disable download-as-pt...
r13108
Thomas Kluyver
Add menu entries for getting converted views of a notebook
r13829 this.element.find('#print_preview').click(function () {
that._nbconvert('html', false);
});
this.element.find('#download_html').click(function () {
that._nbconvert('html', true);
Zachary Sailer
fixing path redirects, cleaning path logic
r12992 });
Thomas Kluyver
Add option to download as reST
r13831
this.element.find('#download_rst').click(function () {
that._nbconvert('rst', true);
});
MinRK
support pdf export in the notebook UI
r16266 this.element.find('#download_pdf').click(function () {
that._nbconvert('pdf', true);
});
Brian Granger
Improved notebook renaming....
r5859 this.element.find('#rename_notebook').click(function () {
Jonathan Frederic
Fix some dialog keyboard_manager problems
r17213 that.save_widget.rename_notebook({notebook: that.notebook});
Brian Granger
Improved notebook renaming....
r5859 });
MinRK
expose notebook checkpoints in html/js...
r10501 this.element.find('#save_checkpoint').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.save_checkpoint();
MinRK
expose notebook checkpoints in html/js...
r10501 });
MinRK
add Revert to the menu bar
r10503 this.element.find('#restore_checkpoint').click(function () {
});
MinRK
Add Trust Notebook to File menu
r15655 this.element.find('#trust_notebook').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.trust_notebook();
MinRK
Add Trust Notebook to File menu
r15655 });
Jonathan Frederic
Almost done!...
r17198 this.events.on('trust_changed.Notebook', function (event, trusted) {
MinRK
disable trust notebook menu item on trusted notebooks
r15657 if (trusted) {
that.element.find('#trust_notebook')
.addClass("disabled")
.find("a").text("Trusted Notebook");
} else {
that.element.find('#trust_notebook')
.removeClass("disabled")
.find("a").text("Trust Notebook");
}
});
Matthias BUSSONNIER
add 'Close and halt' in notebook filemenu
r6850 this.element.find('#kill_and_exit').click(function () {
MinRK
avoid race condition when deleting/starting sessions...
r17649 var close_window = function () {
Jonathan Frederic
Ran function comment conversion tool
r19176 /**
* allow closing of new tabs in Chromium, impossible in FF
*/
Paul Ivanov
make close-and-halt work on new tabs in Chrome...
r13338 window.open('', '_self', '');
window.close();
MinRK
avoid race condition when deleting/starting sessions...
r17649 };
// finish with close on success or failure
that.notebook.session.delete(close_window, close_window);
Matthias BUSSONNIER
add 'Close and halt' in notebook filemenu
r6850 });
Brian Granger
Implemented menu based UI using Wijmo.
r5857 // Edit
Brian Granger
Added cell level cut/copy/paste.
r5879 this.element.find('#cut_cell').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.cut_cell();
Brian Granger
Added cell level cut/copy/paste.
r5879 });
this.element.find('#copy_cell').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.copy_cell();
Brian Granger
Added cell level cut/copy/paste.
r5879 });
Brian Granger
Implemented menu based UI using Wijmo.
r5857 this.element.find('#delete_cell').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.delete_cell();
Brian Granger
Implemented menu based UI using Wijmo.
r5857 });
MinRK
add menu item for undo delete cell...
r9551 this.element.find('#undelete_cell').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.undelete_cell();
MinRK
add menu item for undo delete cell...
r9551 });
Brian Granger
Basic code cell splitting implemented.
r5896 this.element.find('#split_cell').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.split_cell();
Brian Granger
Basic code cell splitting implemented.
r5896 });
this.element.find('#merge_cell_above').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.merge_cell_above();
Brian Granger
Basic code cell splitting implemented.
r5896 });
this.element.find('#merge_cell_below').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.merge_cell_below();
Brian Granger
Basic code cell splitting implemented.
r5896 });
Brian Granger
Implemented menu based UI using Wijmo.
r5857 this.element.find('#move_cell_up').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.move_cell_up();
Brian Granger
Implemented menu based UI using Wijmo.
r5857 });
this.element.find('#move_cell_down').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.move_cell_down();
Brian Granger
Implemented menu based UI using Wijmo.
r5857 });
MinRK
add Edit Notebook Metadata to Edit menu
r12913 this.element.find('#edit_nb_metadata').click(function () {
Jonathan Frederic
More review changes
r17214 that.notebook.edit_metadata({
notebook: that.notebook,
keyboard_manager: that.notebook.keyboard_manager});
MinRK
add Edit Notebook Metadata to Edit menu
r12913 });
Brian Granger
Further work on the toolbar UI....
r5994 // View
this.element.find('#toggle_header').click(function () {
Jonathan Frederic
Kill the layout manager
r19179 $('div#header-container').toggle();
that._size_header();
Brian Granger
Further work on the toolbar UI....
r5994 });
this.element.find('#toggle_toolbar').click(function () {
MinRK
tweak header styling...
r10906 $('div#maintoolbar').toggle();
Jonathan Frederic
Kill the layout manager
r19179 that._size_header();
Brian Granger
Further work on the toolbar UI....
r5994 });
Brian Granger
Implemented menu based UI using Wijmo.
r5857 // Insert
this.element.find('#insert_cell_above').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.insert_cell_above('code');
that.notebook.select_prev();
Brian Granger
Implemented menu based UI using Wijmo.
r5857 });
this.element.find('#insert_cell_below').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.insert_cell_below('code');
that.notebook.select_next();
Brian Granger
Implemented menu based UI using Wijmo.
r5857 });
// Cell
this.element.find('#run_cell').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.execute_cell();
Brian Granger
Implemented menu based UI using Wijmo.
r5857 });
Brian E. Granger
Renaming execute methods.
r14085 this.element.find('#run_cell_select_below').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.execute_cell_and_select_below();
Brian E. Granger
Renaming execute methods.
r14085 });
this.element.find('#run_cell_insert_below').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.execute_cell_and_insert_below();
Brian Granger
Implemented menu based UI using Wijmo.
r5857 });
this.element.find('#run_all_cells').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.execute_all_cells();
Paul Ivanov
javascript is no place to start adding title tags
r13159 });
Paul Ivanov
fine-grained notebook 'run' controls, closes #2521...
r8606 this.element.find('#run_all_cells_above').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.execute_cells_above();
Paul Ivanov
javascript is no place to start adding title tags
r13159 });
Paul Ivanov
fine-grained notebook 'run' controls, closes #2521...
r8606 this.element.find('#run_all_cells_below').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.execute_cells_below();
Paul Ivanov
javascript is no place to start adding title tags
r13159 });
Brian E. Granger
Adding back Kernel menu and Cell Type submenu.
r14869 this.element.find('#to_code').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.to_code();
Brian E. Granger
Adding back Kernel menu and Cell Type submenu.
r14869 });
this.element.find('#to_markdown').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.to_markdown();
Brian E. Granger
Adding back Kernel menu and Cell Type submenu.
r14869 });
this.element.find('#to_raw').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.to_raw();
Brian E. Granger
Adding back Kernel menu and Cell Type submenu.
r14869 });
Brian E. Granger
Simplified Cell menu items related to output.
r14871
this.element.find('#toggle_current_output').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.toggle_output();
Brian Granger
Implemented menu based UI using Wijmo.
r5857 });
Brian E. Granger
Simplified Cell menu items related to output.
r14871 this.element.find('#toggle_current_output_scroll').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.toggle_output_scroll();
Brian Granger
A first go at RST cell support in the notebook.
r6017 });
Brian E. Granger
Cleaning up output management in code and menus.
r14867 this.element.find('#clear_current_output').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.clear_output();
Brian Granger
Implemented menu based UI using Wijmo.
r5857 });
Brian E. Granger
Simplified Cell menu items related to output.
r14871
this.element.find('#toggle_all_output').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.toggle_all_output();
MinRK
third attempt at scrolled long output...
r7362 });
Brian E. Granger
Simplified Cell menu items related to output.
r14871 this.element.find('#toggle_all_output_scroll').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.toggle_all_output_scroll();
MinRK
third attempt at scrolled long output...
r7362 });
Brian Granger
Implemented menu based UI using Wijmo.
r5857 this.element.find('#clear_all_output').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.clear_all_output();
Brian Granger
Implemented menu based UI using Wijmo.
r5857 });
Brian E. Granger
Simplified Cell menu items related to output.
r14871
Brian E. Granger
Adding back Kernel menu and Cell Type submenu.
r14869 // Kernel
this.element.find('#int_kernel').click(function () {
Jessica B. Hamrick
Fix session references in toolbar and menubar
r18204 that.notebook.kernel.interrupt();
Brian E. Granger
Adding back Kernel menu and Cell Type submenu.
r14869 });
this.element.find('#restart_kernel').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.restart_kernel();
Brian E. Granger
Adding back Kernel menu and Cell Type submenu.
r14869 });
Min RK
add Reconnect to kernel menu
r18731 this.element.find('#reconnect_kernel').click(function () {
that.notebook.kernel.reconnect();
});
Brian Granger
Cleaning up menu code....
r5858 // Help
Jonathan Frederic
Almost done!...
r17198 if (this.tour) {
MinRK
allow notebook tour instantiation to fail...
r16672 this.element.find('#notebook_tour').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.tour.start();
MinRK
allow notebook tour instantiation to fail...
r16672 });
} else {
this.element.find('#notebook_tour').addClass("disabled");
}
Brian Granger
Cleaning up menu code....
r5858 this.element.find('#keyboard_shortcuts').click(function () {
Jonathan Frederic
Almost done!...
r17198 that.quick_help.show_keyboard_shortcuts();
Brian Granger
Cleaning up menu code....
r5858 });
MinRK
add Revert to the menu bar
r10503
this.update_restore_checkpoint(null);
Jonathan Frederic
Almost done!...
r17198 this.events.on('checkpoints_listed.Notebook', function (event, data) {
that.update_restore_checkpoint(that.notebook.checkpoints);
MinRK
add Revert to the menu bar
r10503 });
Jonathan Frederic
Almost done!...
r17198 this.events.on('checkpoint_created.Notebook', function (event, data) {
that.update_restore_checkpoint(that.notebook.checkpoints);
MinRK
add Revert to the menu bar
r10503 });
Thomas Kluyver
'Download as' script
r18967
this.events.on('notebook_loaded.Notebook', function() {
var langinfo = that.notebook.metadata.language_info || {};
that.update_nbconvert_script(langinfo);
});
this.events.on('kernel_ready.Kernel', function(event, data) {
var langinfo = data.kernel.info_reply.language_info || {};
that.update_nbconvert_script(langinfo);
});
Brian Granger
Implemented menu based UI using Wijmo.
r5857 };
MinRK
restore checkpoints in a sub-list...
r10520 MenuBar.prototype.update_restore_checkpoint = function(checkpoints) {
MinRK
add 'No Checkpoints' to Revert menu...
r11117 var ul = this.element.find("#restore_checkpoint").find("ul");
ul.empty();
MinRK
review pass on multidir js
r13103 if (!checkpoints || checkpoints.length === 0) {
MinRK
add 'No Checkpoints' to Revert menu...
r11117 ul.append(
$("<li/>")
.addClass("disabled")
.append(
$("<a/>")
.text("No checkpoints")
)
);
return;
MinRK
review pass on multidir js
r13103 }
MinRK
remove debug statement...
r11164
Jonathan Frederic
Almost done!...
r17198 var that = this;
MinRK
minor checkpoint cleanup...
r12050 checkpoints.map(function (checkpoint) {
MinRK
restore checkpoints in a sub-list...
r10520 var d = new Date(checkpoint.last_modified);
MinRK
add 'No Checkpoints' to Revert menu...
r11117 ul.append(
$("<li/>").append(
$("<a/>")
.attr("href", "#")
Matthias BUSSONNIER
use momentjs for nice dates
r17474 .text(moment(d).format("LLLL"))
MinRK
add 'No Checkpoints' to Revert menu...
r11117 .click(function () {
Jonathan Frederic
Almost done!...
r17198 that.notebook.restore_checkpoint_dialog(checkpoint);
MinRK
add 'No Checkpoints' to Revert menu...
r11117 })
)
);
MinRK
minor checkpoint cleanup...
r12050 });
MinRK
restore checkpoints in a sub-list...
r10520 };
Thomas Kluyver
'Download as' script
r18967
MenuBar.prototype.update_nbconvert_script = function(langinfo) {
Jonathan Frederic
Ran function comment conversion tool
r19176 /**
* Set the 'Download as foo' menu option for the relevant language.
*/
Thomas Kluyver
'Download as' script
r18967 var el = this.element.find('#download_script');
var that = this;
// Set menu entry text to e.g. "Python (.py)"
var langname = (langinfo.name || 'Script')
langname = langname.charAt(0).toUpperCase()+langname.substr(1) // Capitalise
Thomas Kluyver
Add the . into file_extension
r19027 el.find('a').text(langname + ' ('+(langinfo.file_extension || 'txt')+')');
Thomas Kluyver
'Download as' script
r18967
// Unregister any previously registered handlers
el.off('click');
if (langinfo.nbconvert_exporter) {
// Metadata specifies a specific exporter, e.g. 'python'
el.click(function() {
that._nbconvert(langinfo.nbconvert_exporter, true);
});
} else {
// Use generic 'script' exporter
el.click(function() {
that._nbconvert('script', true);
});
}
};
Brian Granger
Implemented menu based UI using Wijmo.
r5857
Jonathan Frederic
Almost done!...
r17198 // Backwards compatability.
Brian Granger
Implemented menu based UI using Wijmo.
r5857 IPython.MenuBar = MenuBar;
Jonathan Frederic
Return dicts instead of classes,...
r17201 return {'MenuBar': MenuBar};
Jonathan Frederic
Almost done!...
r17198 });