From e6b7cc9ff9c863316160555878e7acf7d5633da2 Mon Sep 17 00:00:00 2001 From: Jonathan Frederic Date: Thu, 12 Jun 2014 16:23:24 -0700 Subject: [PATCH] Fixed events --- IPython/html/static/base/js/events.js | 3 +- IPython/html/static/notebook/js/main.js | 10 ++- IPython/html/static/notebook/js/notebook.js | 82 +++++++++++---------- IPython/html/static/tree/js/main.js | 6 +- IPython/html/static/tree/js/notebooklist.js | 9 ++- IPython/html/static/tree/js/sessionlist.js | 8 +- 6 files changed, 63 insertions(+), 55 deletions(-) diff --git a/IPython/html/static/base/js/events.js b/IPython/html/static/base/js/events.js index f96cbb306..291754602 100644 --- a/IPython/html/static/base/js/events.js +++ b/IPython/html/static/base/js/events.js @@ -14,7 +14,6 @@ define(['base/js/namespace'], function(IPython) { // Backwards compatability. IPython.Events = Events; - - // TODO: Fix events. + return Events; }); diff --git a/IPython/html/static/notebook/js/main.js b/IPython/html/static/notebook/js/main.js index 789ce9596..1d8664ac9 100644 --- a/IPython/html/static/notebook/js/main.js +++ b/IPython/html/static/notebook/js/main.js @@ -43,7 +43,8 @@ require([ page = new Page(); pager = new Pager('div#pager', 'div#pager_splitter'); layout_manager = new LayoutManager(pager); - notebook = new Notebook('div#notebook', opts); + events = new Events(); + notebook = new Notebook('div#notebook', opts, events); login_widget = new LoginWidget('span#login_widget', opts); toolbar = new MainToolBar('#maintoolbar-container'); quick_help = new QuickHelp(); @@ -77,11 +78,11 @@ require([ } notebook.set_autosave_interval(notebook.minimum_autosave_interval); // only do this once - $([Events]).off('notebook_loaded.Notebook', first_load); + events.off('notebook_loaded.Notebook', first_load); }; - $([Events]).on('notebook_loaded.Notebook', first_load); - $([Events]).trigger('app_initialized.NotebookApp'); + events.on('notebook_loaded.Notebook', first_load); + events.trigger('app_initialized.NotebookApp'); notebook.load_notebook(opts.notebook_name, opts.notebook_path); ipython.page = page; @@ -93,4 +94,5 @@ require([ ipython.menubar = menubar; ipython.toolbar = toolbar; ipython.notification_area = notification_area; + ipython.events = events; }); diff --git a/IPython/html/static/notebook/js/notebook.js b/IPython/html/static/notebook/js/notebook.js index 46d827c52..e53fe684c 100644 --- a/IPython/html/static/notebook/js/notebook.js +++ b/IPython/html/static/notebook/js/notebook.js @@ -43,8 +43,10 @@ define([ * @constructor * @param {String} selector A jQuery selector for the notebook's DOM element * @param {Object} [options] A config object + * @param {Object} [events] An events object */ - var Notebook = function (selector, options) { + var Notebook = function (selector, options, events) { + this.events = events || new Events(); this.keyboard_manager = new KeyboardManager(); this.keyboard = new Keyboard(); this.save_widget = new SaveWidget('span#save_widget'); @@ -159,35 +161,35 @@ define([ Notebook.prototype.bind_events = function () { var that = this; - $([Events]).on('set_next_input.Notebook', function (event, data) { + this.events.on('set_next_input.Notebook', function (event, data) { var index = that.find_cell_index(data.cell); var new_cell = that.insert_cell_below('code',index); new_cell.set_text(data.text); that.dirty = true; }); - $([Events]).on('set_dirty.Notebook', function (event, data) { + this.events.on('set_dirty.Notebook', function (event, data) { that.dirty = data.value; }); - $([Events]).on('trust_changed.Notebook', function (event, data) { + this.events.on('trust_changed.Notebook', function (event, data) { that.trusted = data.value; }); - $([Events]).on('select.Cell', function (event, data) { + this.events.on('select.Cell', function (event, data) { var index = that.find_cell_index(data.cell); that.select(index); }); - $([Events]).on('edit_mode.Cell', function (event, data) { + this.events.on('edit_mode.Cell', function (event, data) { that.handle_edit_mode(data.cell); }); - $([Events]).on('command_mode.Cell', function (event, data) { + this.events.on('command_mode.Cell', function (event, data) { that.handle_command_mode(data.cell); }); - $([Events]).on('status_autorestarting.Kernel', function () { + this.events.on('status_autorestarting.Kernel', function () { Dialog.modal({ title: "Kernel Restarting", body: "The kernel appears to have died. It will restart automatically.", @@ -268,7 +270,7 @@ define([ if (this.dirty == value) { return; } - $([Events]).trigger('set_dirty.Notebook', {value: value}); + this.events.trigger('set_dirty.Notebook', {value: value}); }; /** @@ -531,11 +533,11 @@ define([ var cell = this.get_cell(index); cell.select(); if (cell.cell_type === 'heading') { - $([Events]).trigger('selected_cell_type_changed.Notebook', + this.events.trigger('selected_cell_type_changed.Notebook', {'cell_type':cell.cell_type,level:cell.level} ); } else { - $([Events]).trigger('selected_cell_type_changed.Notebook', + this.events.trigger('selected_cell_type_changed.Notebook', {'cell_type':cell.cell_type} ); } @@ -597,7 +599,7 @@ define([ if (this.mode !== 'command') { cell.command_mode(); this.mode = 'command'; - $([Events]).trigger('command_mode.Notebook'); + this.events.trigger('command_mode.Notebook'); this.keyboard_manager.command_mode(); } }; @@ -627,7 +629,7 @@ define([ if (cell && this.mode !== 'edit') { cell.edit_mode(); this.mode = 'edit'; - $([Events]).trigger('edit_mode.Notebook'); + this.events.trigger('edit_mode.Notebook'); this.keyboard_manager.edit_mode(); } }; @@ -743,7 +745,7 @@ define([ this.undelete_index = i; this.undelete_below = false; } - $([Events]).trigger('delete.Cell', {'cell': cell, 'index': i}); + this.events.trigger('delete.Cell', {'cell': cell, 'index': i}); this.set_dirty(true); } return this; @@ -823,7 +825,7 @@ define([ if(this._insert_element_at_index(cell.element,index)) { cell.render(); - $([Events]).trigger('create.Cell', {'cell': cell, 'index': index}); + this.events.trigger('create.Cell', {'cell': cell, 'index': index}); cell.refresh(); // We used to select the cell after we refresh it, but there // are now cases were this method is called where select is @@ -1058,7 +1060,7 @@ define([ } } this.set_dirty(true); - $([Events]).trigger('selected_cell_type_changed.Notebook', + this.events.trigger('selected_cell_type_changed.Notebook', {'cell_type':'heading',level:level} ); } @@ -1717,7 +1719,7 @@ define([ } if (trusted != this.trusted) { this.trusted = trusted; - $([Events]).trigger("trust_changed.Notebook", trusted); + this.events.trigger("trust_changed.Notebook", trusted); } if (content.worksheets.length > 1) { Dialog.modal({ @@ -1762,7 +1764,7 @@ define([ }; if (trusted != this.trusted) { this.trusted = trusted; - $([Events]).trigger("trust_changed.Notebook", trusted); + this.events.trigger("trust_changed.Notebook", trusted); } return data; }; @@ -1787,10 +1789,10 @@ define([ that.save_notebook(); } }, interval); - $([Events]).trigger("autosave_enabled.Notebook", interval); + this.events.trigger("autosave_enabled.Notebook", interval); } else { this.autosave_timer = null; - $([Events]).trigger("autosave_disabled.Notebook"); + this.events.trigger("autosave_disabled.Notebook"); } }; @@ -1825,7 +1827,7 @@ define([ settings[key] = extra_settings[key]; } } - $([Events]).trigger('notebook_saving.Notebook'); + this.events.trigger('notebook_saving.Notebook'); var url = utils.url_join_encode( this.base_url, 'api/notebooks', @@ -1846,7 +1848,7 @@ define([ */ Notebook.prototype.save_notebook_success = function (start, data, status, xhr) { this.set_dirty(false); - $([Events]).trigger('notebook_saved.Notebook'); + this.events.trigger('notebook_saved.Notebook'); this._update_autosave_interval(start); if (this._checkpoint_after_save) { this.create_checkpoint(); @@ -1883,7 +1885,7 @@ define([ * @param {String} error HTTP error message */ Notebook.prototype.save_notebook_error = function (xhr, status, error) { - $([Events]).trigger('notebook_save_failed.Notebook', [xhr, status, error]); + this.events.trigger('notebook_save_failed.Notebook', [xhr, status, error]); }; /** @@ -1924,7 +1926,7 @@ define([ cell.output_area.trusted = true; } } - $([Events]).on('notebook_saved.Notebook', function () { + this.events.on('notebook_saved.Notebook', function () { window.location.reload(); }); nb.save_notebook(); @@ -2010,7 +2012,7 @@ define([ success : $.proxy(that.rename_success, this), error : $.proxy(that.rename_error, this) }; - $([Events]).trigger('rename_notebook.Notebook', data); + this.events.trigger('rename_notebook.Notebook', data); var url = utils.url_join_encode( this.base_url, 'api/notebooks', @@ -2043,7 +2045,7 @@ define([ var name = this.notebook_name = json.name; var path = json.path; this.session.rename_notebook(name, path); - $([Events]).trigger('notebook_renamed.Notebook', json); + this.events.trigger('notebook_renamed.Notebook', json); }; Notebook.prototype.rename_error = function (xhr, status, error) { @@ -2052,7 +2054,7 @@ define([ $("

").addClass("rename-message") .text('This notebook name already exists.') ); - $([Events]).trigger('notebook_rename_failed.Notebook', [xhr, status, error]); + this.events.trigger('notebook_rename_failed.Notebook', [xhr, status, error]); Dialog.modal({ title: "Notebook Rename Error!", body: dialog, @@ -2096,7 +2098,7 @@ define([ success : $.proxy(this.load_notebook_success,this), error : $.proxy(this.load_notebook_error,this), }; - $([Events]).trigger('notebook_loading.Notebook'); + this.events.trigger('notebook_loading.Notebook'); var url = utils.url_join_encode( this.base_url, 'api/notebooks', @@ -2181,7 +2183,7 @@ define([ // now that we're fully loaded, it is safe to restore save functionality delete(this.save_notebook); - $([Events]).trigger('notebook_loaded.Notebook'); + this.events.trigger('notebook_loaded.Notebook'); }; /** @@ -2193,7 +2195,7 @@ define([ * @param {String} error HTTP error message */ Notebook.prototype.load_notebook_error = function (xhr, status, error) { - $([Events]).trigger('notebook_load_failed.Notebook', [xhr, status, error]); + this.events.trigger('notebook_load_failed.Notebook', [xhr, status, error]); var msg; if (xhr.status === 400) { msg = error; @@ -2281,7 +2283,7 @@ define([ } else { this.last_checkpoint = null; } - $([Events]).trigger('checkpoints_listed.Notebook', [data]); + this.events.trigger('checkpoints_listed.Notebook', [data]); }; /** @@ -2293,7 +2295,7 @@ define([ * @param {String} error_msg HTTP error message */ Notebook.prototype.list_checkpoints_error = function (xhr, status, error_msg) { - $([Events]).trigger('list_checkpoints_failed.Notebook'); + this.events.trigger('list_checkpoints_failed.Notebook'); }; /** @@ -2327,7 +2329,7 @@ define([ Notebook.prototype.create_checkpoint_success = function (data, status, xhr) { data = $.parseJSON(data); this.add_checkpoint(data); - $([Events]).trigger('checkpoint_created.Notebook', data); + this.events.trigger('checkpoint_created.Notebook', data); }; /** @@ -2339,7 +2341,7 @@ define([ * @param {String} error_msg HTTP error message */ Notebook.prototype.create_checkpoint_error = function (xhr, status, error_msg) { - $([Events]).trigger('checkpoint_failed.Notebook'); + this.events.trigger('checkpoint_failed.Notebook'); }; Notebook.prototype.restore_checkpoint_dialog = function (checkpoint) { @@ -2388,7 +2390,7 @@ define([ * @param {String} checkpoint ID */ Notebook.prototype.restore_checkpoint = function (checkpoint) { - $([Events]).trigger('notebook_restoring.Notebook', checkpoint); + this.events.trigger('notebook_restoring.Notebook', checkpoint); var url = utils.url_join_encode( this.base_url, 'api/notebooks', @@ -2413,7 +2415,7 @@ define([ * @param {jqXHR} xhr jQuery Ajax object */ Notebook.prototype.restore_checkpoint_success = function (data, status, xhr) { - $([Events]).trigger('checkpoint_restored.Notebook'); + this.events.trigger('checkpoint_restored.Notebook'); this.load_notebook(this.notebook_name, this.notebook_path); }; @@ -2426,7 +2428,7 @@ define([ * @param {String} error_msg HTTP error message */ Notebook.prototype.restore_checkpoint_error = function (xhr, status, error_msg) { - $([Events]).trigger('checkpoint_restore_failed.Notebook'); + this.events.trigger('checkpoint_restore_failed.Notebook'); }; /** @@ -2436,7 +2438,7 @@ define([ * @param {String} checkpoint ID */ Notebook.prototype.delete_checkpoint = function (checkpoint) { - $([Events]).trigger('notebook_restoring.Notebook', checkpoint); + this.events.trigger('notebook_restoring.Notebook', checkpoint); var url = utils.url_join_encode( this.base_url, 'api/notebooks', @@ -2461,7 +2463,7 @@ define([ * @param {jqXHR} xhr jQuery Ajax object */ Notebook.prototype.delete_checkpoint_success = function (data, status, xhr) { - $([Events]).trigger('checkpoint_deleted.Notebook', data); + this.events.trigger('checkpoint_deleted.Notebook', data); this.load_notebook(this.notebook_name, this.notebook_path); }; @@ -2474,7 +2476,7 @@ define([ * @param {String} error_msg HTTP error message */ Notebook.prototype.delete_checkpoint_error = function (xhr, status, error_msg) { - $([Events]).trigger('checkpoint_delete_failed.Notebook'); + this.events.trigger('checkpoint_delete_failed.Notebook'); }; diff --git a/IPython/html/static/tree/js/main.js b/IPython/html/static/tree/js/main.js index b9493a564..7b9fa857a 100644 --- a/IPython/html/static/tree/js/main.js +++ b/IPython/html/static/tree/js/main.js @@ -5,6 +5,7 @@ var ipython = ipython || {}; require([ 'base/js/namespace', 'components/jquery/jquery.min', + 'base/js/events', 'base/js/page', 'base/js/utils', 'tree/js/notebooklist', @@ -17,6 +18,7 @@ require([ ], function( IPython, $, + Events, Page, Utils, NotebookList, @@ -31,7 +33,8 @@ require([ base_url: Utils.get_body_data("baseUrl"), notebook_path: Utils.get_body_data("notebookPath"), }; - session_list = new SesssionList(opts); + events = new Events(); + session_list = new SesssionList(opts, events); notebook_list = new NotebookList('#notebook_list', opts, undefined, session_list); cluster_list = new ClusterList('#cluster_list', opts); kernel_list = new KernelList('#running_list', opts, session_list); @@ -107,4 +110,5 @@ require([ ipython.session_list = session_list; ipython.kernel_list = kernel_list; ipython.login_widget = login_widget; + ipython.events = events; }); diff --git a/IPython/html/static/tree/js/notebooklist.js b/IPython/html/static/tree/js/notebooklist.js index db18e2383..df154e7a0 100644 --- a/IPython/html/static/tree/js/notebooklist.js +++ b/IPython/html/static/tree/js/notebooklist.js @@ -5,9 +5,8 @@ define([ 'base/js/namespace', 'components/jquery/jquery.min', 'base/js/utils', - 'base/js/events', 'base/js/dialog', -], function(IPython, $, Utils, Events, Dialog) { +], function(IPython, $, Utils, Dialog) { "use strict"; var NotebookList = function (selector, options, element_name, session_list) { @@ -25,8 +24,10 @@ define([ this.sessions = {}; this.base_url = options.base_url || Utils.get_body_data("baseUrl"); this.notebook_path = options.notebook_path || Utils.get_body_data("notebookPath"); - $([Events]).on('sessions_loaded.Dashboard', - function(e, d) { that.sessions_loaded(d); }); + if (this.session_list && this.session_list.events) { + this.session_list.events.on('sessions_loaded.Dashboard', + function(e, d) { that.sessions_loaded(d); }); + } }; NotebookList.prototype.style = function () { diff --git a/IPython/html/static/tree/js/sessionlist.js b/IPython/html/static/tree/js/sessionlist.js index b7ec80eb4..5c49aa181 100644 --- a/IPython/html/static/tree/js/sessionlist.js +++ b/IPython/html/static/tree/js/sessionlist.js @@ -5,11 +5,11 @@ define([ 'base/js/namespace', 'components/jquery/jquery.min', 'base/js/utils', - 'base/js/events', -], function(IPython, $, Utils, Events) { +], function(IPython, $, Utils) { "use strict"; - var SesssionList = function (options) { + var SesssionList = function (options, events) { + this.events = events; this.sessions = {}; this.base_url = options.base_url || Utils.get_body_data("baseUrl"); }; @@ -39,7 +39,7 @@ define([ ); this.sessions[nb_path] = data[i].id; } - Events.trigger('sessions_loaded.Dashboard', this.sessions); + this.events.trigger('sessions_loaded.Dashboard', this.sessions); }; // Backwards compatability.