##// END OF EJS Templates
Support both value tuple and upper, lower traits for both int and float widgets
Support both value tuple and upper, lower traits for both int and float widgets

File last commit:

r17273:f0d869df
r17682:eed350de
Show More
manager.js
201 lines | 7.6 KiB | application/javascript | JavascriptLexer
Jonathan Frederic
Almost done!...
r17198 // Copyright (c) IPython Development Team.
// Distributed under the terms of the Modified BSD License.
define([
"underscore",
Jonathan Frederic
Done with major changes,...
r17199 "backbone",
Tarun Gaba
Added jquery in define
r17273 "jquery",
Jonathan Frederic
Fix all the tests
r17216 "base/js/namespace"
Tarun Gaba
Added jquery in define
r17273 ], function (_, Backbone, $, IPython) {
Jonathan Frederic
Done with major changes,...
r17199
//--------------------------------------------------------------------
// WidgetManager class
//--------------------------------------------------------------------
Jonathan Frederic
MWE,...
r17200 var WidgetManager = function (comm_manager, notebook) {
Jonathan Frederic
Done with major changes,...
r17199 // Public constructor
WidgetManager._managers.push(this);
// Attach a comm manager to the
Jonathan Frederic
MWE,...
r17200 this.keyboard_manager = notebook.keyboard_manager;
Jonathan Frederic
Done with major changes,...
r17199 this.notebook = notebook;
this.comm_manager = comm_manager;
this._models = {}; /* Dictionary of model ids and model instances */
// Register already-registered widget model types with the comm manager.
var that = this;
_.each(WidgetManager._model_types, function(model_type, model_name) {
that.comm_manager.register_target(model_name, $.proxy(that._handle_comm_open, that));
});
};
//--------------------------------------------------------------------
// Class level
//--------------------------------------------------------------------
WidgetManager._model_types = {}; /* Dictionary of model type names (target_name) and model types. */
WidgetManager._view_types = {}; /* Dictionary of view names and view types. */
WidgetManager._managers = []; /* List of widget managers */
WidgetManager.register_widget_model = function (model_name, model_type) {
// Registers a widget model by name.
WidgetManager._model_types[model_name] = model_type;
// Register the widget with the comm manager. Make sure to pass this object's context
// in so `this` works in the call back.
_.each(WidgetManager._managers, function(instance, i) {
if (instance.comm_manager !== null) {
instance.comm_manager.register_target(model_name, $.proxy(instance._handle_comm_open, instance));
Jonathan Frederic
Converted tabs to spaces
r14506 }
Jonathan Frederic
Done with major changes,...
r17199 });
};
WidgetManager.register_widget_view = function (view_name, view_type) {
// Registers a widget view by name.
WidgetManager._view_types[view_name] = view_type;
};
//--------------------------------------------------------------------
// Instance level
//--------------------------------------------------------------------
WidgetManager.prototype.display_view = function(msg, model) {
// Displays a view for a particular model.
var cell = this.get_msg_cell(msg.parent_header.msg_id);
if (cell === null) {
console.log("Could not determine where the display" +
" message was from. Widget will not be displayed");
} else {
var view = this.create_view(model, {cell: cell});
if (view === null) {
console.error("View creation failed", model);
Jason Grout
Intermediate changes to javascript side of backbone widgets
r14486 }
Sylvain Corlay
Solving #5997: instances of WidgetView (that are not instances of DOMWidgetView) do not trigger widget_area.show anymore.
r17227 this._handle_display_view(view);
Jonathan Frederic
Done with major changes,...
r17199 if (cell.widget_subarea) {
cell.widget_subarea.append(view.$el);
Jason Grout
Intermediate changes to javascript side of backbone widgets
r14486 }
Sylvain Corlay
Solving #5997: instances of WidgetView (that are not instances of DOMWidgetView) do not trigger widget_area.show anymore.
r17227 view.trigger('displayed');
Jonathan Frederic
Done with major changes,...
r17199 }
};
WidgetManager.prototype._handle_display_view = function (view) {
// Have the IPython keyboard manager disable its event
// handling so the widget can capture keyboard input.
// Note, this is only done on the outer most widgets.
if (this.keyboard_manager) {
this.keyboard_manager.register_events(view.$el);
if (view.additional_elements) {
for (var i = 0; i < view.additional_elements.length; i++) {
this.keyboard_manager.register_events(view.additional_elements[i]);
Jonathan Frederic
Completely remove cell from model and view.
r14534 }
Jonathan Frederic
Done with major changes,...
r17199 }
}
};
WidgetManager.prototype.create_view = function(model, options, view) {
// Creates a view for a particular model.
var view_name = model.get('_view_name');
var ViewType = WidgetManager._view_types[view_name];
if (ViewType) {
// If a view is passed into the method, use that view's cell as
// the cell for the view that is created.
options = options || {};
if (view !== undefined) {
options.cell = view.options.cell;
Jonathan Frederic
jshint widget.js
r14457 }
Jonathan Frederic
Done with major changes,...
r17199
// Create and render the view...
var parameters = {model: model, options: options};
view = new ViewType(parameters);
view.render();
model.on('destroy', view.remove, view);
return view;
}
return null;
};
WidgetManager.prototype.get_msg_cell = function (msg_id) {
var cell = null;
// First, check to see if the msg was triggered by cell execution.
if (this.notebook) {
cell = this.notebook.get_msg_cell(msg_id);
}
if (cell !== null) {
return cell;
}
// Second, check to see if a get_cell callback was defined
// for the message. get_cell callbacks are registered for
// widget messages, so this block is actually checking to see if the
// message was triggered by a widget.
var kernel = this.comm_manager.kernel;
if (kernel) {
var callbacks = kernel.get_callbacks_for_msg(msg_id);
if (callbacks && callbacks.iopub &&
callbacks.iopub.get_cell !== undefined) {
return callbacks.iopub.get_cell();
Jonathan Frederic
Completely remove cell from model and view.
r14534 }
Jonathan Frederic
Done with major changes,...
r17199 }
// Not triggered by a cell or widget (no get_cell callback
// exists).
return null;
};
WidgetManager.prototype.callbacks = function (view) {
// callback handlers specific a view
var callbacks = {};
if (view && view.options.cell) {
// Try to get output handlers
var cell = view.options.cell;
var handle_output = null;
var handle_clear_output = null;
if (cell.output_area) {
handle_output = $.proxy(cell.output_area.handle_output, cell.output_area);
handle_clear_output = $.proxy(cell.output_area.handle_clear_output, cell.output_area);
Jonathan Frederic
Removed comm dependency of widget model and view
r14469 }
Jonathan Frederic
Done with major changes,...
r17199 // Create callback dict using what is known
Brian E. Granger
Remove model from WidgetManager._model on comm:close.
r16652 var that = this;
Jonathan Frederic
Done with major changes,...
r17199 callbacks = {
iopub : {
output : handle_output,
clear_output : handle_clear_output,
// Special function only registered by widget messages.
// Allows us to get the cell for a message so we know
// where to add widgets if the code requires it.
get_cell : function () {
return cell;
},
},
};
}
return callbacks;
};
WidgetManager.prototype.get_model = function (model_id) {
// Look-up a model instance by its id.
var model = this._models[model_id];
if (model !== undefined && model.id == model_id) {
return model;
}
return null;
};
WidgetManager.prototype._handle_comm_open = function (comm, msg) {
// Handle when a comm is opened.
var that = this;
var model_id = comm.comm_id;
var widget_type_name = msg.content.target_name;
var widget_model = new WidgetManager._model_types[widget_type_name](this, model_id, comm);
widget_model.on('comm:close', function () {
delete that._models[model_id];
});
this._models[model_id] = widget_model;
};
Jonathan Frederic
Almost done!...
r17198
Jonathan Frederic
Fix all the tests
r17216 // Backwards compatability.
IPython.WidgetManager = WidgetManager;
Jonathan Frederic
Fix all the bugs!
r17203 return {'WidgetManager': WidgetManager};
Jonathan Frederic
Done with major changes,...
r17199 });