diff --git a/IPython/html/static/notebook/js/widgetmanager.js b/IPython/html/static/notebook/js/widgetmanager.js
index e2dfe20f2..6b3dfa523 100644
--- a/IPython/html/static/notebook/js/widgetmanager.js
+++ b/IPython/html/static/notebook/js/widgetmanager.js
@@ -34,14 +34,12 @@
// Attach a comm manager to the
this.comm_manager = comm_manager;
+ this._models = {}; /* Dictionary of model ids and model instances */
// Register already-registered widget model types with the comm manager.
- for (var name in WidgetManager._model_types) {
- if (WidgetManager._model_types.hasOwnProperty(name)) {
- this.comm_manager.register_target(name, $.proxy(this._handle_comm_open, this));
-
- }
- }
+ _.each(WidgetManager._model_types, function(value, key) {
+ this.comm_manager.register_target(value, $.proxy(this._handle_comm_open, this));
+ });
};
//--------------------------------------------------------------------
@@ -49,7 +47,6 @@
//--------------------------------------------------------------------
WidgetManager._model_types = {}; /* Dictionary of model type names (target_name) and model types. */
WidgetManager._view_types = {}; /* Dictionary of view names and view types. */
- WidgetManager._models = {}; /* Dictionary of model ids and model instances */
WidgetManager._managers = []; /* List of widget managers */
WidgetManager.register_widget_model = function (model_name, model_type) {
@@ -58,12 +55,11 @@
// Register the widget with the comm manager. Make sure to pass this object's context
// in so `this` works in the call back.
- for (var i = 0; i < WidgetManager._managers.length; i++) {
- var instance = WidgetManager._managers[i];
+ _.each(WidgetManager._managers, function(instance, i) {
if (instance.comm_manager !== null) {
instance.comm_manager.register_target(model_name, $.proxy(instance._handle_comm_open, instance));
}
- }
+ });
};
WidgetManager.register_widget_view = function (view_name, view_type) {
@@ -169,7 +165,7 @@
};
WidgetManager.prototype.get_model = function (model_id) {
- var model = WidgetManager._models[model_id];
+ var model = this._models[model_id];
if (model !== undefined && model.id == model_id) {
return model;
}
@@ -180,7 +176,7 @@
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);
- WidgetManager._models[model_id] = widget_model;
+ this._models[model_id] = widget_model;
};
IPython.WidgetManager = WidgetManager;
diff --git a/IPython/html/static/notebook/js/widgets/widget.js b/IPython/html/static/notebook/js/widgets/widget.js
index a6ac02779..9a23283a9 100644
--- a/IPython/html/static/notebook/js/widgets/widget.js
+++ b/IPython/html/static/notebook/js/widgets/widget.js
@@ -86,17 +86,14 @@ function(WidgetManager, Underscore, Backbone){
apply_update: function (state) {
// Handle when a widget is updated via the python side.
- for (var key in state) {
- if (state.hasOwnProperty(key)) {
- var value = state[key];
- this.key_value_lock = [key, value];
- try {
- this.set(key, this._unpack_models(value));
- } finally {
- this.key_value_lock = null;
- }
+ _.each(state, function(value, key) {
+ this.key_value_lock = [key, value];
+ try {
+ this.set(key, this._unpack_models(value));
+ } finally {
+ this.key_value_lock = null;
}
- }
+ });
},
_handle_status: function (msg, callbacks) {
@@ -205,9 +202,9 @@ function(WidgetManager, Underscore, Backbone){
return value.id;
} else if (value instanceof Object) {
var packed = {};
- for (var key in value) {
- packed[key] = this._pack_models(value[key]);
- }
+ _.each(value, function(sub_value, key) {
+ packed[key] = this._pack_models(sub_value);
+ });
return packed;
} else {
return value;
@@ -218,9 +215,9 @@ function(WidgetManager, Underscore, Backbone){
// Replace model ids with models recursively.
if (value instanceof Object) {
var unpacked = {};
- for (var key in value) {
- unpacked[key] = this._unpack_models(value[key]);
- }
+ _.each(value, function(sub_value, key) {
+ unpacked[key] = this._unpack_models(sub_value);
+ });
return unpacked;
} else {
var model = this.widget_manager.get_model(value);
@@ -369,20 +366,16 @@ function(WidgetManager, Underscore, Backbone){
var css = this.model.get('_css');
if (css === undefined) {return;}
- for (var selector in css) {
- if (css.hasOwnProperty(selector)) {
- // Apply the css traits to all elements that match the selector.
- var elements = this._get_selector_element(selector);
- if (elements.length > 0) {
- var css_traits = css[selector];
- for (var css_key in css_traits) {
- if (css_traits.hasOwnProperty(css_key)) {
- elements.css(css_key, css_traits[css_key]);
- }
- }
- }
+ _.each(css, function(css_traits, selector){
+ // Apply the css traits to all elements that match the selector.
+ var elements = this._get_selector_element(selector);
+ if (elements.length > 0) {
+ _.each(css_traits, function(css_value, css_key){
+ elements.css(css_key, css_value);
+ });
}
- }
+ });
+
},
_get_selector_element: function (selector) {
diff --git a/IPython/html/static/notebook/js/widgets/widget_selection.js b/IPython/html/static/notebook/js/widgets/widget_selection.js
index db35626c5..c95e34b2c 100644
--- a/IPython/html/static/notebook/js/widgets/widget_selection.js
+++ b/IPython/html/static/notebook/js/widgets/widget_selection.js
@@ -67,13 +67,13 @@ define(["notebook/js/widgets/widget"], function(WidgetManager){
var items = this.model.get('values');
var $replace_droplist = $('
')
.addClass('dropdown-menu');
- for (var index in items) {
- var that = this;
+ _.each(items, function(item, i) {
var item_button = $('')
- .text(items[index])
+ .text(item)
.on('click', $.proxy(this.handle_click, this));
$replace_droplist.append($('').append(item_button));
- }
+ });
+
this.$droplist.replaceWith($replace_droplist);
this.$droplist.remove();
this.$droplist = $replace_droplist;
@@ -140,41 +140,41 @@ define(["notebook/js/widgets/widget"], function(WidgetManager){
// Add missing items to the DOM.
var items = this.model.get('values');
var disabled = this.model.get('disabled');
- for (var index in items) {
- var item_query = ' :input[value="' + items[index] + '"]';
+ _.each(items, function(item, index) {
+ var item_query = ' :input[value="' + item + '"]';
if (this.$el.find(item_query).length === 0) {
var $label = $('')
.addClass('radio')
- .text(items[index])
+ .text(item)
.appendTo(this.$container);
$('')
.attr('type', 'radio')
.addClass(this.model)
- .val(items[index])
+ .val(item)
.prependTo($label)
.on('click', $.proxy(this.handle_click, this));
}
var $item_element = this.$container.find(item_query);
- if (this.model.get('value') == items[index]) {
+ if (this.model.get('value') == item) {
$item_element.prop('checked', true);
} else {
$item_element.prop('checked', false);
}
$item_element.prop('disabled', disabled);
- }
+ });
// Remove items that no longer exist.
this.$container.find('input').each(function(i, obj) {
var value = $(obj).val();
var found = false;
- for (var index in items) {
- if (items[index] == value) {
+ _.each(items, function(item, index) {
+ if (item == value) {
found = true;
break;
}
- }
+ });
if (!found) {
$(obj).parent().remove();
@@ -230,37 +230,37 @@ define(["notebook/js/widgets/widget"], function(WidgetManager){
// Add missing items to the DOM.
var items = this.model.get('values');
var disabled = this.model.get('disabled');
- for (var index in items) {
- var item_query = ' :contains("' + items[index] + '")';
+ _.each(items, function(item, index) {
+ var item_query = ' :contains("' + item + '")';
if (this.$buttongroup.find(item_query).length === 0) {
$('')
.attr('type', 'button')
.addClass('btn')
- .text(items[index])
+ .text(item)
.appendTo(this.$buttongroup)
.on('click', $.proxy(this.handle_click, this));
}
var $item_element = this.$buttongroup.find(item_query);
- if (this.model.get('value') == items[index]) {
+ if (this.model.get('value') == item) {
$item_element.addClass('active');
} else {
$item_element.removeClass('active');
}
- $item_element.prop('disabled', disabled);
- }
+ $item_element.prop('disabled', disabled);
+ });
// Remove items that no longer exist.
this.$buttongroup.find('button').each(function(i, obj) {
var value = $(obj).text();
var found = false;
- for (var index in items) {
- if (items[index] == value) {
+ _.each(items, function(item, index) {
+ if (item == value) {
found = true;
break;
}
- }
-
+ });
+
if (!found) {
$(obj).remove();
}
@@ -314,16 +314,16 @@ define(["notebook/js/widgets/widget"], function(WidgetManager){
if (options === undefined || options.updated_view != this) {
// Add missing items to the DOM.
var items = this.model.get('values');
- for (var index in items) {
- var item_query = ' :contains("' + items[index] + '")';
+ _.each(items, function(item, index) {
+ var item_query = ' :contains("' + item + '")';
if (this.$listbox.find(item_query).length === 0) {
$('')
- .text(items[index])
- .attr('value', items[index])
+ .text(item)
+ .attr('value', item)
.appendTo(this.$listbox)
.on('click', $.proxy(this.handle_click, this));
- }
- }
+ }
+ });
// Select the correct element
this.$listbox.val(this.model.get('value'));
@@ -336,12 +336,12 @@ define(["notebook/js/widgets/widget"], function(WidgetManager){
this.$listbox.find('option').each(function(i, obj) {
var value = $(obj).text();
var found = false;
- for (var index in items) {
- if (items[index] == value) {
+ _.each(items, function(item, index) {
+ if (item == value) {
found = true;
break;
}
- }
+ });
if (!found) {
$(obj).remove();
diff --git a/IPython/html/static/notebook/js/widgets/widget_selectioncontainer.js b/IPython/html/static/notebook/js/widgets/widget_selectioncontainer.js
index bff6efc36..283378ff2 100644
--- a/IPython/html/static/notebook/js/widgets/widget_selectioncontainer.js
+++ b/IPython/html/static/notebook/js/widgets/widget_selectioncontainer.js
@@ -39,28 +39,26 @@ define(["notebook/js/widgets/widget"], function(WidgetManager){
if (options === undefined || options.updated_view != this) {
// Set tab titles
var titles = this.model.get('_titles');
- for (var page_index in titles) {
-
+ _.each(titles, function(title, page_index) {
var accordian = this.containers[page_index];
if (accordian !== undefined) {
accordian
.find('.accordion-heading')
.find('.accordion-toggle')
- .text(titles[page_index]);
+ .text(title);
}
- }
+ });
// Set selected page
var selected_index = this.model.get("selected_index");
if (0 <= selected_index && selected_index < this.containers.length) {
- for (var index in this.containers) {
+ _.each(this.containers, function(container, index) {
if (index==selected_index) {
- this.containers[index].find('.accordion-body').collapse('show');
+ container.find('.accordion-body').collapse('show');
} else {
- this.containers[index].find('.accordion-body').collapse('hide');
+ container.find('.accordion-body').collapse('hide');
}
-
- }
+ });
}
}
return AccordionView.__super__.update.apply(this);
@@ -218,12 +216,12 @@ define(["notebook/js/widgets/widget"], function(WidgetManager){
if (options === undefined || options.updated_view != this) {
// Set tab titles
var titles = this.model.get('_titles');
- for (var page_index in titles) {
- var tab_text = this.containers[page_index];
+ _.each(titles, function(title, page_index) {
+ var tab_text = this.containers[page_index];
if (tab_text !== undefined) {
- tab_text.text(titles[page_index]);
- }
- }
+ tab_text.text(title);
+ }
+ });
var selected_index = this.model.get('selected_index');
if (0 <= selected_index && selected_index < this.containers.length) {