// Copyright (c) IPython Development Team. // Distributed under the terms of the Modified BSD License. define([ 'require', 'base/js/namespace', 'jquery', './toolbar', './celltoolbar' ], function(require, IPython, $, toolbar, celltoolbar) { "use strict"; var MainToolBar = function (selector, options) { /** * Constructor * * Parameters: * selector: string * options: dictionary * Dictionary of keyword arguments. * events: $(Events) instance * notebook: Notebook instance **/ toolbar.ToolBar.apply(this, [selector, options] ); this.events = options.events; this.notebook = options.notebook; this._make(); this.notebook.keyboard_manager.register_events(this.element); Object.seal(this); }; MainToolBar.prototype = Object.create(toolbar.ToolBar.prototype); MainToolBar.prototype._make = function () { var grps = [ [ ['ipython.save-notebook'], 'save-notbook' ], [ ['ipython.insert-cell-after'], 'insert_above_below'], [ ['ipython.cut-selected-cell', 'ipython.copy-selected-cell', 'ipython.paste-cell-after' ] , 'cut_copy_paste'], [ ['ipython.move-selected-cell-up', 'ipython.move-selected-cell-down' ], 'move_up_down'], [ ['ipython.run-select-next', 'ipython.interrupt-kernel', 'ipython.restart-kernel' ], 'run_int'], ['<add_celltype_list>'], ['<add_celltoolbar_list>'] ]; this.construct(grps); }; // add a cell type drop down to the maintoolbar. // triggered when the pseudo action `<add_celltype_list>` is // encountered when building a toolbar. MainToolBar.prototype._pseudo_actions.add_celltype_list = function () { var that = this; var sel = $('<select/>') .attr('id','cell_type') .addClass('form-control select-xs') .append($('<option/>').attr('value','code').text('Code')) .append($('<option/>').attr('value','markdown').text('Markdown')) .append($('<option/>').attr('value','raw').text('Raw NBConvert')) .append($('<option/>').attr('value','heading').text('Heading')); this.events.on('selected_cell_type_changed.Notebook', function (event, data) { if (data.cell_type === 'heading') { sel.val('Markdown'); } else { sel.val(data.cell_type); } }); sel.change(function () { var cell_type = $(this).val(); switch (cell_type) { case 'code': that.notebook.to_code(); break; case 'markdown': that.notebook.to_markdown(); break; case 'raw': that.notebook.to_raw(); break; case 'heading': that.notebook._warn_heading(); that.notebook.to_heading(); sel.val('markdown'); break; default: console.log("unrecognized cell type:", cell_type); } that.notebook.focus_cell(); }); return sel; }; MainToolBar.prototype._pseudo_actions.add_celltoolbar_list = function () { var label = $('<span/>').addClass("navbar-text").text('Cell Toolbar:'); var select = $('<select/>') .attr('id', 'ctb_select') .addClass('form-control select-xs') .append($('<option/>').attr('value', '').text('None')); var that = this; select.change(function() { var val = $(this).val(); if (val ==='') { celltoolbar.CellToolbar.global_hide(); delete that.notebook.metadata.celltoolbar; } else { celltoolbar.CellToolbar.global_show(); celltoolbar.CellToolbar.activate_preset(val, that.events); that.notebook.metadata.celltoolbar = val; } that.notebook.focus_cell(); }); // Setup the currently registered presets. var presets = celltoolbar.CellToolbar.list_presets(); for (var i=0; i<presets.length; i++) { var name = presets[i]; select.append($('<option/>').attr('value', name).text(name)); } // Setup future preset registrations. this.events.on('preset_added.CellToolbar', function (event, data) { var name = data.name; select.append($('<option/>').attr('value', name).text(name)); }); this.events.on('unregistered_preset.CellToolbar', function (event, data) { if (select.val() === data.name){ select.val(''); celltoolbar.CellToolbar.global_hide(); delete that.notebook.metadata.celltoolbar; } select.find("option[value='"+name+"']" ).remove(); }); // Update select value when a preset is activated. this.events.on('preset_activated.CellToolbar', function (event, data) { if (select.val() !== data.name){ select.val(data.name); } }); var wrapper = $('<div/>').addClass('btn-group'); wrapper.append(label).append(select); return wrapper; }; // Backwards compatibility. IPython.MainToolBar = MainToolBar; return {'MainToolBar': MainToolBar}; });