##// END OF EJS Templates
This feature was discussed in #6123, but it doesn't look like anything was ever incorporated into the IPython Notebook....
This feature was discussed in #6123, but it doesn't look like anything was ever incorporated into the IPython Notebook. Here's a brief overview of the changes: - Display of messages from other clients can be toggled on and off from within a notebook, either using the ``<M-m>e`` keyboard shortcut in the web UI, or through the option in the "Kernel" menu. - notebook.js controls whether messages are displayed through a callback that is invoked from kernel.js when no callbacks are available for a message. - The UI displays ``execute_input`` messages originating from an other clients in new cells at the end of the notebook. Output messages (``execute_result`` et al.) will only be displayed if a cell exists with a matching message ID. Pending design questions: - Should each ``execute_input`` message cause a new cell to be created? - Should new cells be placed at the end of the notebook, or elsewhere? If the latter, what criteria should be followed?

File last commit:

r19080:cbc9dc59
r19164:17ac8ca3
Show More
widget_selectioncontainer.js
270 lines | 10.4 KiB | application/javascript | JavascriptLexer
/ IPython / html / static / widgets / js / widget_selectioncontainer.js
Jonathan Frederic
Almost done!...
r17198 // Copyright (c) IPython Development Team.
// Distributed under the terms of the Modified BSD License.
Jonathan Frederic
Added standard IPY JS header to widget JS files.
r14366
Jonathan Frederic
Almost done!...
r17198 define([
"widgets/js/widget",
Jonathan Frederic
Done with major changes,...
r17199 "base/js/utils",
Jonathan Frederic
Fix all the tests
r17216 "jquery",
MinRK
add bootstrap shim for require...
r17312 "bootstrap",
Jonathan Frederic
Fix all the tests
r17216 ], function(widget, utils, $){
Jonathan Frederic
Added standard IPY JS header to widget JS files.
r14366
Jonathan Frederic
Almost done!...
r17198 var AccordionView = widget.DOMWidgetView.extend({
Jonathan Frederic
Implement view logic in selection containers.
r19023 initialize: function(){
AccordionView.__super__.initialize.apply(this, arguments);
this.containers = [];
this.model_containers = {};
Jason Grout
Update widget selection containers to reflect how viewlist works...
r19067 this.children_views = new widget.ViewList(this.add_child_view, this.remove_child_view, this);
Jonathan Frederic
Implement view logic in selection containers.
r19023 this.listenTo(this.model, 'change:children', function(model, value) {
this.children_views.update(value);
}, this);
},
Jonathan Frederic
Added multicontainer widget
r14284 render: function(){
Jonathan Frederic
Added PEP8 style comments to all of the JS code.
r14609 // Called when view is rendered.
Jonathan Frederic
Done with major changes,...
r17199 var guid = 'panel-group' + utils.uuid();
Jonathan Frederic
Fixed backbone event handling for accordion view
r14455 this.$el
.attr('id', guid)
Jonathan Frederic
Ran jdfreder/bootstrap2to3
r16913 .addClass('panel-group');
Jonathan Frederic
Fix broken accordion widget,...
r15950 this.model.on('change:selected_index', function(model, value, options) {
this.update_selected_index(model.previous('selected_index'), value, options);
}, this);
this.model.on('change:_titles', function(model, value, options) {
this.update_titles(value);
}, this);
Jonathan Frederic
Fixed bugs in displayed event triggering for containers
r16660 var that = this;
Jonathan Frederic
Move displayed event to view.
r17179 this.on('displayed', function() {
Jonathan Frederic
Add displayed property....
r15955 this.update_titles();
sylvain.corlay
correction
r17354 }, this);
Jonathan Frederic
Implement view logic in selection containers.
r19023 this.children_views.update(this.model.get('children'));
Jason Grout
Live updates for children automatically change container views....
r14503 },
Jonathan Frederic
Added multicontainer widget
r14284
Jonathan Frederic
Fix broken accordion widget,...
r15950 update_titles: function(titles) {
// Set tab titles
Jonathan Frederic
Add displayed property....
r15955 if (!titles) {
titles = this.model.get('_titles');
}
Jonathan Frederic
Fix broken accordion widget,...
r15950 var that = this;
_.each(titles, function(title, page_index) {
var accordian = that.containers[page_index];
if (accordian !== undefined) {
accordian
Jonathan Frederic
Ran jdfreder/bootstrap2to3
r16913 .find('.panel-heading')
Jonathan Frederic
Fix broken accordion widget,...
r15950 .find('.accordion-toggle')
.text(title);
}
});
},
update_selected_index: function(old_index, new_index, options) {
// Only update the selection if the selection wasn't triggered
// by the front-end. It must be triggered by the back-end.
if (options === undefined || options.updated_view != this) {
Jonathan Frederic
Ran jdfreder/bootstrap2to3
r16913 this.containers[old_index].find('.panel-collapse').collapse('hide');
Jonathan Frederic
Fix broken accordion widget,...
r15950 if (0 <= new_index && new_index < this.containers.length) {
Jonathan Frederic
Ran jdfreder/bootstrap2to3
r16913 this.containers[new_index].find('.panel-collapse').collapse('show');
Jonathan Frederic
Added selected_index support to accordion view.
r14370 }
}
Jonathan Frederic
Added multicontainer widget
r14284 },
Jason Grout
Update widget selection containers to reflect how viewlist works...
r19067 remove_child_view: function(view) {
Jonathan Frederic
Added PEP8 style comments to all of the JS code.
r14609 // Called when a child is removed from children list.
Jason Grout
Update widget selection containers to reflect how viewlist works...
r19067 // TODO: does this handle two different views of the same model as children?
var model = view.model;
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 var accordion_group = this.model_containers[model.id];
this.containers.splice(accordion_group.container_index, 1);
delete this.model_containers[model.id];
accordion_group.remove();
},
Jonathan Frederic
Added multicontainer widget
r14284
Jason Grout
Update widget selection containers to reflect how viewlist works...
r19067 add_child_view: function(model) {
Jonathan Frederic
Added PEP8 style comments to all of the JS code.
r14609 // Called when a child is added to children list.
Jonathan Frederic
Added multicontainer widget
r14284 var index = this.containers.length;
Jonathan Frederic
Done with major changes,...
r17199 var uuid = utils.uuid();
Jonathan Frederic
Added multicontainer widget
r14284 var accordion_group = $('<div />')
Jonathan Frederic
Ran jdfreder/bootstrap2to3
r16913 .addClass('panel panel-default')
Jonathan Frederic
Added multicontainer widget
r14284 .appendTo(this.$el);
var accordion_heading = $('<div />')
Jonathan Frederic
Ran jdfreder/bootstrap2to3
r16913 .addClass('panel-heading')
Jonathan Frederic
Added multicontainer widget
r14284 .appendTo(accordion_group);
Jonathan Frederic
Added selected_index support to accordion view.
r14370 var that = this;
Jonathan Frederic
Added multicontainer widget
r14284 var accordion_toggle = $('<a />')
.addClass('accordion-toggle')
.attr('data-toggle', 'collapse')
.attr('data-parent', '#' + this.$el.attr('id'))
.attr('href', '#' + uuid)
Jonathan Frederic
Added selected_index support to accordion view.
r14370 .click(function(evt){
Jonathan Frederic
comment model.set, so we know that it triggers update on other views
r14569
// Calling model.set will trigger all of the other views of the
// model to update.
Jonathan Frederic
Fix broken accordion widget,...
r15950 that.model.set("selected_index", index, {updated_view: that});
Jonathan Frederic
Moved touch logic out of model into view....
r14482 that.touch();
Jonathan Frederic
Added selected_index support to accordion view.
r14370 })
Jonathan Frederic
Replace .html with .text everywhere possible
r14663 .text('Page ' + index)
Jonathan Frederic
Added multicontainer widget
r14284 .appendTo(accordion_heading);
var accordion_body = $('<div />', {id: uuid})
Jonathan Frederic
Ran jdfreder/bootstrap2to3
r16913 .addClass('panel-collapse collapse')
Jonathan Frederic
Added multicontainer widget
r14284 .appendTo(accordion_group);
var accordion_inner = $('<div />')
Jonathan Frederic
Ran jdfreder/bootstrap2to3
r16913 .addClass('panel-body')
Jonathan Frederic
Added multicontainer widget
r14284 .appendTo(accordion_body);
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 var container_index = this.containers.push(accordion_group) - 1;
accordion_group.container_index = container_index;
this.model_containers[model.id] = accordion_group;
Thomas Kluyver
Allow widget views to be loaded from require modules...
r18142
Jonathan Frederic
Fix view rendering order.
r18883 var dummy = $('<div/>');
accordion_inner.append(dummy);
Jonathan Frederic
Finished adding error handling.
r18896 return this.create_child_view(model).then(function(view) {
Jonathan Frederic
Fix view rendering order.
r18883 dummy.replaceWith(view.$el);
Thomas Kluyver
Allow widget views to be loaded from require modules...
r18142 that.update();
that.update_titles();
Jonathan Frederic
Fixed bugs in displayed event triggering for containers
r16660
Thomas Kluyver
Allow widget views to be loaded from require modules...
r18142 // Trigger the displayed event of the child view.
that.after_displayed(function() {
view.trigger('displayed');
});
Jonathan Frederic
Finished adding error handling.
r18896 return view;
Jason Grout
Catch errors after our then()s, instead of in parallel with them (this missing exceptions)...
r19080 }).catch(utils.reject("Couldn't add child view to box", true));
Jonathan Frederic
Added multicontainer widget
r14284 },
Jonathan Frederic
Implement view logic in selection containers.
r19023
remove: function() {
Jason Grout
Add comments emphasizing the order of steps in widget box remove() methods
r19066 // We remove this widget before removing the children as an optimization
// we want to remove the entire container from the DOM first before
// removing each individual child separately.
Jonathan Frederic
Implement view logic in selection containers.
r19023 AccordionView.__super__.remove.apply(this, arguments);
this.children_views.remove();
},
Jonathan Frederic
Added multicontainer widget
r14284 });
Jonathan Frederic
Added TabView to multicontainer
r14290
Jonathan Frederic
Added PEP8 style comments to all of the JS code.
r14609
Jonathan Frederic
Almost done!...
r17198 var TabView = widget.DOMWidgetView.extend({
Jonathan Frederic
Added `update_children` pattern to remaining parent widgets
r14507 initialize: function() {
Jonathan Frederic
Added PEP8 style comments to all of the JS code.
r14609 // Public constructor.
Jonathan Frederic
Many checks off the todo list, test fixes
r14583 TabView.__super__.initialize.apply(this, arguments);
Jonathan Frederic
Implement view logic in selection containers.
r19023
this.containers = [];
Jason Grout
Update widget selection containers to reflect how viewlist works...
r19067 this.children_views = new widget.ViewList(this.add_child_view, this.remove_child_view, this);
Jonathan Frederic
Implement view logic in selection containers.
r19023 this.listenTo(this.model, 'change:children', function(model, value) {
this.children_views.update(value);
}, this);
Jonathan Frederic
Added `update_children` pattern to remaining parent widgets
r14507 },
Jason Grout
Intermediate changes to javascript side of backbone widgets
r14486
Jonathan Frederic
Added TabView to multicontainer
r14290 render: function(){
Jonathan Frederic
Added PEP8 style comments to all of the JS code.
r14609 // Called when view is rendered.
Jonathan Frederic
Done with major changes,...
r17199 var uuid = 'tabs'+utils.uuid();
Jonathan Frederic
Added selected_index property to TabView
r14307 var that = this;
Jonathan Frederic
Added TabView to multicontainer
r14290 this.$tabs = $('<div />', {id: uuid})
.addClass('nav')
.addClass('nav-tabs')
.appendTo(this.$el);
this.$tab_contents = $('<div />', {id: uuid + 'Content'})
.addClass('tab-content')
.appendTo(this.$el);
Jonathan Frederic
Implement view logic in selection containers.
r19023 this.children_views.update(this.model.get('children'));
Jonathan Frederic
Added `update_children` pattern to remaining parent widgets
r14507 },
Jonathan Frederic
Added PEP8 style comments to all of the JS code.
r14609
Jonathan Frederic
Finished style attributes.
r17724 update_attr: function(name, value) {
// Set a css attr of the widget view.
this.$tabs.css(name, value);
},
Jason Grout
Update widget selection containers to reflect how viewlist works...
r19067 remove_child_view: function(view) {
Jonathan Frederic
Added PEP8 style comments to all of the JS code.
r14609 // Called when a child is removed from children list.
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 this.containers.splice(view.parent_tab.tab_text_index, 1);
view.parent_tab.remove();
view.parent_container.remove();
view.remove();
Jonathan Frederic
Added TabView to multicontainer
r14290 },
Jason Grout
Update widget selection containers to reflect how viewlist works...
r19067 add_child_view: function(model) {
Jonathan Frederic
Added PEP8 style comments to all of the JS code.
r14609 // Called when a child is added to children list.
Jonathan Frederic
Added TabView to multicontainer
r14290 var index = this.containers.length;
Jonathan Frederic
Done with major changes,...
r17199 var uuid = utils.uuid();
Jonathan Frederic
Added TabView to multicontainer
r14290
var that = this;
var tab = $('<li />')
.css('list-style-type', 'none')
.appendTo(this.$tabs);
Jonathan Frederic
comment model.set, so we know that it triggers update on other views
r14569
Thomas Kluyver
Allow widget views to be loaded from require modules...
r18142
Jonathan Frederic
Fix view rendering order.
r18883 var tab_text = $('<a />')
.attr('href', '#' + uuid)
.attr('data-toggle', 'tab')
.text('Page ' + index)
.appendTo(tab)
.click(function (e) {
// Calling model.set will trigger all of the other views of the
// model to update.
that.model.set("selected_index", index, {updated_view: that});
that.touch();
that.select_page(index);
});
tab.tab_text_index = that.containers.push(tab_text) - 1;
var dummy = $('<div />');
var contents_div = $('<div />', {id: uuid})
.addClass('tab-pane')
.addClass('fade')
.append(dummy)
.appendTo(that.$tab_contents);
Jonathan Frederic
Finished adding error handling.
r18896 return this.create_child_view(model).then(function(view) {
Jonathan Frederic
Fix view rendering order.
r18883 dummy.replaceWith(view.$el);
view.parent_tab = tab;
Thomas Kluyver
Allow widget views to be loaded from require modules...
r18142 view.parent_container = contents_div;
// Trigger the displayed event of the child view.
that.after_displayed(function() {
view.trigger('displayed');
Jonathan Frederic
Added TabView to multicontainer
r14290 });
Jonathan Frederic
Finished adding error handling.
r18896 return view;
Jason Grout
Catch errors after our then()s, instead of in parallel with them (this missing exceptions)...
r19080 }).catch(utils.reject("Couldn't add child view to box", true));
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 },
update: function(options) {
// Update the contents of this view
//
// Called when the model is changed. The model may have been
// changed by another view or by a state update from the back-end.
if (options === undefined || options.updated_view != this) {
// Set tab titles
var titles = this.model.get('_titles');
Jonathan Frederic
Fixed context errors and a couple of typos to get the tests working again
r14686 var that = this;
Jonathan Frederic
Removed for () loops where necessary. Replaced with _.each
r14664 _.each(titles, function(title, page_index) {
Jonathan Frederic
Fixed context errors and a couple of typos to get the tests working again
r14686 var tab_text = that.containers[page_index];
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 if (tab_text !== undefined) {
Jonathan Frederic
Removed for () loops where necessary. Replaced with _.each
r14664 tab_text.text(title);
}
});
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598
var selected_index = this.model.get('selected_index');
if (0 <= selected_index && selected_index < this.containers.length) {
this.select_page(selected_index);
}
}
return TabView.__super__.update.apply(this);
Jonathan Frederic
Added TabView to multicontainer
r14290 },
Jonathan Frederic
Added selected_index property to TabView
r14307
select_page: function(index) {
Jonathan Frederic
Added PEP8 style comments to all of the JS code.
r14609 // Select a page.
Jonathan Frederic
Added selected_index property to TabView
r14307 this.$tabs.find('li')
.removeClass('active');
this.containers[index].tab('show');
},
Jonathan Frederic
Implement view logic in selection containers.
r19023
remove: function() {
Jason Grout
Add comments emphasizing the order of steps in widget box remove() methods
r19066 // We remove this widget before removing the children as an optimization
// we want to remove the entire container from the DOM first before
// removing each individual child separately.
Jonathan Frederic
Implement view logic in selection containers.
r19023 TabView.__super__.remove.apply(this, arguments);
this.children_views.remove();
},
Jonathan Frederic
Added TabView to multicontainer
r14290 });
Jonathan Frederic
Almost done!...
r17198
return {
'AccordionView': AccordionView,
'TabView': TabView,
};
Jonathan Frederic
Added TabView to multicontainer
r14290 });