##// END OF EJS Templates
Update celltoolbar.js...
Update celltoolbar.js I want to write an extension with multiple select bar. They are supposed to be displayed inline, not in block mode. The better way is to use span instead of div.

File last commit:

r17216:08b8fbc9
r17265:950b016a
Show More
widget_selectioncontainer.js
267 lines | 10.3 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",
"components/bootstrap/js/bootstrap.min",
], 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
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
Added multicontainer widget
r14284 this.containers = [];
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 this.model_containers = {};
Jonathan Frederic
Fixed buggy behavior
r17173 this.update_children([], this.model.get('children'));
this.model.on('change:children', function(model, value, options) {
this.update_children(model.previous('children'), value);
Jonathan Frederic
Added `update_children` pattern to remaining parent widgets
r14507 }, this);
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();
Jonathan Frederic
Fixed bugs in displayed event triggering for containers
r16660 // Trigger model displayed events for any models that are child to
// this model when this model is displayed.
that.is_displayed = true;
for (var property in that.child_views) {
if (that.child_views.hasOwnProperty(property)) {
Jonathan Frederic
Move displayed event to view.
r17179 that.child_views[property].trigger('displayed');
Jonathan Frederic
Fixed bugs in displayed event triggering for containers
r16660 }
}
Jonathan Frederic
Add displayed property....
r15955 }, this);
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 },
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598
update_children: function(old_list, new_list) {
Jonathan Frederic
Added PEP8 style comments to all of the JS code.
r14609 // Called when the children list is modified.
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 this.do_diff(old_list,
new_list,
$.proxy(this.remove_child_model, this),
$.proxy(this.add_child_model, this));
},
Jonathan Frederic
Added multicontainer widget
r14284
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 remove_child_model: function(model) {
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 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
Review comments
r17178 this.pop_child_view(model);
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 },
Jonathan Frederic
Added multicontainer widget
r14284
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 add_child_model: 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
Got containers and mutlicontainers working! Yay
r14598 var view = this.create_child_view(model);
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;
Jonathan Frederic
Added multicontainer widget
r14284 accordion_inner.append(view.$el);
Jonathan Frederic
Added selected_index support to accordion view.
r14370
Jonathan Frederic
Added ability to title multicontainer pages before multicontainer display()
r14289 this.update();
Jonathan Frederic
Add displayed property....
r15955 this.update_titles();
Jonathan Frederic
Fixed bugs in displayed event triggering for containers
r16660
// Trigger the displayed event if this model is displayed.
if (this.is_displayed) {
Jonathan Frederic
Move displayed event to view.
r17179 view.trigger('displayed');
Jonathan Frederic
Fixed bugs in displayed event triggering for containers
r16660 }
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
Added `update_children` pattern to remaining parent widgets
r14507 this.containers = [];
Jonathan Frederic
Many checks off the todo list, test fixes
r14583 TabView.__super__.initialize.apply(this, arguments);
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
Added `update_children` pattern to remaining parent widgets
r14507 this.containers = [];
Jonathan Frederic
Fixed buggy behavior
r17173 this.update_children([], this.model.get('children'));
this.model.on('change:children', function(model, value, options) {
this.update_children(model.previous('children'), value);
Jonathan Frederic
Added `update_children` pattern to remaining parent widgets
r14507 }, this);
Jonathan Frederic
Fixed bugs in displayed event triggering for containers
r16660
// Trigger model displayed events for any models that are child to
// this model when this model is displayed.
Jonathan Frederic
Move displayed event to view.
r17179 this.on('displayed', function(){
Jonathan Frederic
Fixed bugs in displayed event triggering for containers
r16660 that.is_displayed = true;
for (var property in that.child_views) {
if (that.child_views.hasOwnProperty(property)) {
Jonathan Frederic
Move displayed event to view.
r17179 that.child_views[property].trigger('displayed');
Jonathan Frederic
Fixed bugs in displayed event triggering for containers
r16660 }
}
});
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
Got containers and mutlicontainers working! Yay
r14598 update_children: function(old_list, new_list) {
Jonathan Frederic
Added PEP8 style comments to all of the JS code.
r14609 // Called when the children list is modified.
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 this.do_diff(old_list,
new_list,
$.proxy(this.remove_child_model, this),
$.proxy(this.add_child_model, this));
},
Jonathan Frederic
Added selected_index support to accordion view.
r14370
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 remove_child_model: function(model) {
Jonathan Frederic
Added PEP8 style comments to all of the JS code.
r14609 // Called when a child is removed from children list.
Jonathan Frederic
Review comments
r17178 var view = this.pop_child_view(model);
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 },
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 add_child_model: 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
Got containers and mutlicontainers working! Yay
r14598 var view = this.create_child_view(model);
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
Got containers and mutlicontainers working! Yay
r14598 view.parent_tab = tab;
Jonathan Frederic
Added TabView to multicontainer
r14290 var tab_text = $('<a />')
.attr('href', '#' + uuid)
.attr('data-toggle', 'tab')
Jonathan Frederic
Replace .html with .text everywhere possible
r14663 .text('Page ' + index)
Jonathan Frederic
Added TabView to multicontainer
r14290 .appendTo(tab)
.click(function (e) {
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
add locks to update everywhere by using options to pass this...
r14570 that.model.set("selected_index", index, {updated_view: this});
Jonathan Frederic
Moved touch logic out of model into view....
r14482 that.touch();
Jonathan Frederic
Added selected_index property to TabView
r14307 that.select_page(index);
Jonathan Frederic
Added TabView to multicontainer
r14290 });
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 tab.tab_text_index = this.containers.push(tab_text) - 1;
Jonathan Frederic
Added TabView to multicontainer
r14290
var contents_div = $('<div />', {id: uuid})
.addClass('tab-pane')
.addClass('fade')
.append(view.$el)
.appendTo(this.$tab_contents);
Jonathan Frederic
Got containers and mutlicontainers working! Yay
r14598 view.parent_container = contents_div;
Jonathan Frederic
Fixed bugs in displayed event triggering for containers
r16660
// Trigger the displayed event if this model is displayed.
if (this.is_displayed) {
Jonathan Frederic
Move displayed event to view.
r17179 view.trigger('displayed');
Jonathan Frederic
Fixed bugs in displayed event triggering for containers
r16660 }
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
Added TabView to multicontainer
r14290 });
Jonathan Frederic
Almost done!...
r17198
return {
'AccordionView': AccordionView,
'TabView': TabView,
};
Jonathan Frederic
Added TabView to multicontainer
r14290 });