Show More
@@ -274,4 +274,82 b' define(["notebook/js/widget"], function(widget_manager){' | |||
|
274 | 274 | }); |
|
275 | 275 | |
|
276 | 276 | widget_manager.register_widget_view('ToggleButtonsView', ToggleButtonsView); |
|
277 | ||
|
278 | var ListBoxView = IPython.WidgetView.extend({ | |
|
279 | ||
|
280 | // Called when view is rendered. | |
|
281 | render : function(){ | |
|
282 | this.$el | |
|
283 | .addClass('widget-hbox') | |
|
284 | .html(''); | |
|
285 | this.$label = $('<div />') | |
|
286 | .appendTo(this.$el) | |
|
287 | .addClass('widget-hlabel') | |
|
288 | .hide(); | |
|
289 | this.$listbox = $('<select />') | |
|
290 | .addClass('widget-listbox') | |
|
291 | .attr('size', 6) | |
|
292 | .appendTo(this.$el); | |
|
293 | this.$el_to_style = this.$listbox; // Set default element to style | |
|
294 | this.update(); | |
|
295 | }, | |
|
296 | ||
|
297 | // Handles: Backend -> Frontend Sync | |
|
298 | // Frontent -> Frontend Sync | |
|
299 | update : function(){ | |
|
300 | ||
|
301 | // Add missing items to the DOM. | |
|
302 | var items = this.model.get('values'); | |
|
303 | for (var index in items) { | |
|
304 | var item_query = ' :contains("' + items[index] + '")'; | |
|
305 | if (this.$listbox.find(item_query).length == 0) { | |
|
306 | ||
|
307 | var that = this; | |
|
308 | $('<option />') | |
|
309 | .html(items[index]) | |
|
310 | .attr('value', items[index]) | |
|
311 | .appendTo(this.$listbox) | |
|
312 | .on('click', function(e){ | |
|
313 | that.model.set('value', $(e.target).html(), this); | |
|
314 | that.model.update_other_views(that); | |
|
315 | }); | |
|
316 | } | |
|
317 | } | |
|
318 | ||
|
319 | // Select the correct element | |
|
320 | this.$listbox.val(this.model.get('value')); | |
|
321 | ||
|
322 | // Disable listbox if needed | |
|
323 | var disabled = this.model.get('disabled'); | |
|
324 | this.$listbox.prop('disabled', disabled); | |
|
325 | ||
|
326 | // Remove items that no longer exist. | |
|
327 | this.$listbox.find('option').each(function(i, obj) { | |
|
328 | var value = $(obj).html(); | |
|
329 | var found = false; | |
|
330 | for (var index in items) { | |
|
331 | if (items[index] == value) { | |
|
332 | found = true; | |
|
333 | break; | |
|
334 | } | |
|
335 | } | |
|
336 | ||
|
337 | if (!found) { | |
|
338 | $(obj).remove(); | |
|
339 | } | |
|
340 | }); | |
|
341 | ||
|
342 | var description = this.model.get('description'); | |
|
343 | if (description.length == 0) { | |
|
344 | this.$label.hide(); | |
|
345 | } else { | |
|
346 | this.$label.html(description); | |
|
347 | this.$label.show(); | |
|
348 | } | |
|
349 | return IPython.WidgetView.prototype.update.call(this); | |
|
350 | }, | |
|
351 | ||
|
352 | }); | |
|
353 | ||
|
354 | widget_manager.register_widget_view('ListBoxView', ListBoxView); | |
|
277 | 355 | }); |
@@ -149,6 +149,12 b' The widget area typically looks something like this:' | |||
|
149 | 149 | margin-bottom: 0px; |
|
150 | 150 | } |
|
151 | 151 | |
|
152 | /* Listbox */ | |
|
153 | .widget-listbox { | |
|
154 | width: 364px; | |
|
155 | margin-bottom: 0px; | |
|
156 | } | |
|
157 | ||
|
152 | 158 | /* Single Line Textbox - used for IntTextView and FloatTextView */ |
|
153 | 159 | .widget-numeric-text { |
|
154 | 160 | width: 150px; |
General Comments 0
You need to be logged in to leave comments.
Login now