##// END OF EJS Templates
Made scroll to bottom use msgs...
Jonathan Frederic -
Show More
@@ -36,6 +36,7 b' define(["components/underscore/underscore-min",'
36 this.msg_throttle = 3;
36 this.msg_throttle = 3;
37 this.msg_buffer = null;
37 this.msg_buffer = null;
38 this.views = {};
38 this.views = {};
39 this._custom_msg_callbacks = [];
39
40
40 // Remember comm associated with the model.
41 // Remember comm associated with the model.
41 this.comm = comm;
42 this.comm = comm;
@@ -64,16 +65,18 b' define(["components/underscore/underscore-min",'
64 }
65 }
65 },
66 },
66
67
67 send: function(content) {
68
69 send: function(content, cell) {
68
70
69 // Used the last modified view as the sender of the message. This
71 // Used the last modified view as the sender of the message. This
70 // will insure that any python code triggered by the sent message
72 // will insure that any python code triggered by the sent message
71 // can create and display widgets and output.
73 // can create and display widgets and output.
72 var cell = null;
74 if (cell === undefined) {
73 if (this.last_modified_view != undefined &&
75 if (this.last_modified_view != undefined &&
74 this.last_modified_view.cell != undefined) {
76 this.last_modified_view.cell != undefined) {
75 cell = this.last_modified_view.cell;
77 cell = this.last_modified_view.cell;
76 }
78 }
79 }
77 var callbacks = this._make_callbacks(cell);
80 var callbacks = this._make_callbacks(cell);
78 var data = {'custom_content': content};
81 var data = {'custom_content': content};
79 this.comm.send(data, callbacks);
82 this.comm.send(data, callbacks);
@@ -90,15 +93,29 b' define(["components/underscore/underscore-min",'
90 },
93 },
91
94
92
95
93 on_msg: function (callback) {
96 on_msg: function (callback, remove) {
94 this._msg_callback = callback;
97 if (remove) {
98 var found_index = -1;
99 for (var index in this._custom_msg_callbacks) {
100 if (callback === this._custom_msg_callbacks[index]) {
101 found_index = index;
102 break;
103 }
104 }
105
106 if (found_index >= 0) {
107 this._custom_msg_callbacks.splice(found_index, 1);
108 }
109 } else {
110 this._custom_msg_callbacks.push(callback)
111 }
95 },
112 },
96
113
97
114
98 _handle_custom_msg: function (content) {
115 _handle_custom_msg: function (content) {
99 if (this._msg_callback) {
116 for (var index in this._custom_msg_callbacks) {
100 try {
117 try {
101 this._msg_callback(content);
118 this._custom_msg_callbacks[index](content);
102 } catch (e) {
119 } catch (e) {
103 console.log("Exception in widget model msg callback", e, content);
120 console.log("Exception in widget model msg callback", e, content);
104 }
121 }
@@ -466,6 +483,11 b' define(["components/underscore/underscore-min",'
466 }
483 }
467 },
484 },
468
485
486
487 send: function(content) {
488 this.model.send({event: 'click'}, this.cell);
489 },
490
469 update: function() {
491 update: function() {
470 if (this.model.get('visible') != undefined) {
492 if (this.model.get('visible') != undefined) {
471 if (this.visible != this.model.get('visible')) {
493 if (this.visible != this.model.get('visible')) {
@@ -50,8 +50,7 b' define(["notebook/js/widget"], function(widget_manager){'
50 },
50 },
51
51
52 _handle_click: function(){
52 _handle_click: function(){
53 this.model.last_modified_view = this; // For callbacks.
53 this.send({event: 'click'});
54 this.model.send({event: 'click'});
55 },
54 },
56 });
55 });
57
56
@@ -53,8 +53,23 b' define(["notebook/js/widget"], function(widget_manager){'
53 .appendTo(this.$el);
53 .appendTo(this.$el);
54 this.$el_to_style = this.$textbox; // Set default element to style
54 this.$el_to_style = this.$textbox; // Set default element to style
55 this.update(); // Set defaults.
55 this.update(); // Set defaults.
56
57 this.on_msg();
58 },
59
60
61 _handle_textarea_msg: function (content){
62 if (content.method == "scroll_to_bottom") {
63 this.scroll_to_bottom();
64 }
65 },
66
67
68 scroll_to_bottom: function (){
69 this.$textbox.scrollTop(this.$textbox[0].scrollHeight);
56 },
70 },
57
71
72
58 // Handles: Backend -> Frontend Sync
73 // Handles: Backend -> Frontend Sync
59 // Frontent -> Frontend Sync
74 // Frontent -> Frontend Sync
60 update : function(){
75 update: function(){
@@ -62,14 +77,6 b' define(["notebook/js/widget"], function(widget_manager){'
62 this.$textbox.val(this.model.get('value'));
77 this.$textbox.val(this.model.get('value'));
63 }
78 }
64
79
65 if (this.last_scroll_to_bottom == undefined) {
66 this.last_scroll_to_bottom = 0;
67 }
68 if (this.last_scroll_to_bottom < this.model.get('scroll_to_bottoms')) {
69 this.last_scroll_to_bottom < this.model.get('scroll_to_bottoms');
70 this.$textbox.scrollTop(this.$textbox[0].scrollHeight);
71 }
72
73 var disabled = this.model.get('disabled');
80 var disabled = this.model.get('disabled');
74 this.$textbox.prop('disabled', disabled);
81 this.$textbox.prop('disabled', disabled);
75
82
@@ -151,8 +158,7 b' define(["notebook/js/widget"], function(widget_manager){'
151 // Handles text submition
158 // Handles text submition
152 handleKeypress: function(e) {
159 handleKeypress: function(e) {
153 if (e.keyCode == 13) { // Return key
160 if (e.keyCode == 13) { // Return key
154 this.model.last_modified_view = this; // For callbacks.
161 this.send({event: 'submit'});
155 this.model.send({event: 'submit'});
156 }
162 }
157 },
163 },
158 });
164 });
@@ -27,11 +27,10 b' class StringWidget(Widget):'
27 default_view_name = Unicode('TextBoxView')
27 default_view_name = Unicode('TextBoxView')
28
28
29 # Keys
29 # Keys
30 _keys = ['value', 'disabled', 'description', 'scroll_to_bottoms']
30 _keys = ['value', 'disabled', 'description']
31 value = Unicode(help="String value")
31 value = Unicode(help="String value")
32 disabled = Bool(False, help="Enable or disable user changes")
32 disabled = Bool(False, help="Enable or disable user changes")
33 description = Unicode(help="Description of the value this widget represents")
33 description = Unicode(help="Description of the value this widget represents")
34 scroll_to_bottoms = Int(0, help="Used to scroll a TextAreaView to the bottom")
35
34
36
35
37 def __init__(self, **kwargs):
36 def __init__(self, **kwargs):
@@ -41,7 +40,7 b' class StringWidget(Widget):'
41
40
42
41
43 def scroll_to_bottom(self):
42 def scroll_to_bottom(self):
44 self.scroll_to_bottoms += 1
43 self._comm.send({"method": "scroll_to_bottom"})
45
44
46
45
47 def on_click(self, callback, remove=False):
46 def on_click(self, callback, remove=False):
General Comments 0
You need to be logged in to leave comments. Login now