123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- // Copyright (c) Jupyter Development Team.
- // Distributed under the terms of the Modified BSD License.
- define([
- 'jquery',
- 'base/js/namespace',
- 'base/js/utils',
- 'base/js/dialog',
- 'codemirror/lib/codemirror',
- 'codemirror/mode/meta',
- ], function($, IPython, utils, dialog, CodeMirror) {
- "use strict";
-
- var MenuBar = function (selector, options) {
- /**
- * Constructor
- *
- * A MenuBar Class to generate the menubar of IPython notebook
- *
- * Parameters:
- * selector: string
- * options: dictionary
- * Dictionary of keyword arguments.
- * codemirror: CodeMirror instance
- * contents: ContentManager instance
- * events: $(Events) instance
- * base_url : string
- * file_path : string
- */
- options = options || {};
- this.base_url = options.base_url || utils.get_body_data("baseUrl");
- this.selector = selector;
- this.editor = options.editor;
- this.events = options.events;
- this.save_widget = options.save_widget;
- if (this.selector !== undefined) {
- this.element = $(selector);
- this.bind_events();
- }
- this._load_mode_menu();
- Object.seal(this);
- };
- MenuBar.prototype.bind_events = function () {
- var that = this;
- var editor = that.editor;
-
- // File
- this.element.find('#new-file').click(function () {
- var w = window.open(undefined, IPython._target);
- // Create a new file in the current directory
- var parent = utils.url_path_split(editor.file_path)[0];
- editor.contents.new_untitled(parent, {type: "file"}).then(
- function (data) {
- w.location = utils.url_path_join(
- that.base_url, 'edit', utils.encode_uri_components(data.path)
- );
- },
- function(error) {
- w.close();
- dialog.modal({
- title : 'Creating New File Failed',
- body : "The error was: " + error.message,
- buttons : {'OK' : {'class' : 'btn-primary'}}
- });
- }
- );
- });
- this.element.find('#save-file').click(function () {
- editor.save();
- });
- this.element.find('#rename-file').click(function () {
- that.save_widget.rename();
- });
- this.element.find('#download-file').click(function () {
- window.open(utils.url_path_join(
- that.base_url, 'files',
- utils.encode_uri_components(that.editor.file_path)
- ) + '?download=1');
- });
-
- // Edit
- this.element.find('#menu-find').click(function () {
- editor.codemirror.execCommand("find");
- });
- this.element.find('#menu-replace').click(function () {
- editor.codemirror.execCommand("replace");
- });
- this.element.find('#menu-keymap-default').click(function () {
- editor.update_codemirror_options({
- vimMode: false,
- keyMap: 'default'
- });
- });
- this.element.find('#menu-keymap-sublime').click(function () {
- editor.update_codemirror_options({
- vimMode: false,
- keyMap: 'sublime'
- });
- });
- this.element.find('#menu-keymap-emacs').click(function () {
- editor.update_codemirror_options({
- vimMode: false,
- keyMap: 'emacs'
- });
- });
- this.element.find('#menu-keymap-vim').click(function () {
- editor.update_codemirror_options({
- vimMode: true,
- keyMap: 'vim'
- });
- });
-
- // View
- this.element.find('#toggle_header').click(function (){
- $("#header-container").toggle();
- });
-
- this.element.find('#menu-line-numbers').click(function () {
- var current = editor.codemirror.getOption('lineNumbers');
- var value = Boolean(1-current);
- editor.update_codemirror_options({lineNumbers: value});
- });
-
- this.events.on("config_changed.Editor", function () {
- var keyMap = editor.codemirror.getOption('keyMap') || 'default';
- that.element.find(".selected-keymap").removeClass("selected-keymap");
- that.element.find("#menu-keymap-" + keyMap).addClass("selected-keymap");
- });
-
- this.events.on("mode_changed.Editor", function (evt, modeinfo) {
- that.element.find("#current-mode")
- .text(modeinfo.name)
- .attr(
- 'title',
- "The current language is " + modeinfo.name
- );
- });
- };
-
- MenuBar.prototype._load_mode_menu = function () {
- var list = this.element.find("#mode-menu");
- var editor = this.editor;
- function make_set_mode(info) {
- return function () {
- editor.set_codemirror_mode(info);
- // save codemirror mode for extension when explicitly selected
- editor.save_codemirror_mode(info);
- };
- }
- for (var i = 0; i < CodeMirror.modeInfo.length; i++) {
- var info = CodeMirror.modeInfo[i];
- list.append($("<li>").append(
- $("<a>").attr("href", "#")
- .text(info.name)
- .click(make_set_mode(info))
- .attr('title',
- "Set language to " + info.name
- )
- ));
- }
- };
- return {'MenuBar': MenuBar};
- });
|