Show More
@@ -566,8 +566,11 b' var IPython = (function (IPython) {' | |||||
566 | var cont = IPython.Cell.prototype.unselect.apply(this); |
|
566 | var cont = IPython.Cell.prototype.unselect.apply(this); | |
567 | if (cont) { |
|
567 | if (cont) { | |
568 | // When a code cell is usnelected, make sure that the corresponding |
|
568 | // When a code cell is usnelected, make sure that the corresponding | |
569 | // tooltip to that cell is closed. |
|
569 | // tooltip and completer to that cell is closed. | |
570 | IPython.tooltip.remove_and_cancel_tooltip(true); |
|
570 | IPython.tooltip.remove_and_cancel_tooltip(true); | |
|
571 | if (this.completer !== null) { | |||
|
572 | this.completer.close(); | |||
|
573 | } | |||
571 | } |
|
574 | } | |
572 | return cont; |
|
575 | return cont; | |
573 | }; |
|
576 | }; |
@@ -86,8 +86,7 b' var IPython = (function (IPython) {' | |||||
86 |
|
86 | |||
87 | Completer.prototype.startCompletion = function () { |
|
87 | Completer.prototype.startCompletion = function () { | |
88 | // call for a 'first' completion, that will set the editor and do some |
|
88 | // call for a 'first' completion, that will set the editor and do some | |
89 |
// special behavio |
|
89 | // special behavior like autopicking if only one completion available. | |
90 | // |
|
|||
91 | if (this.editor.somethingSelected()) return; |
|
90 | if (this.editor.somethingSelected()) return; | |
92 | this.done = false; |
|
91 | this.done = false; | |
93 | // use to get focus back on opera |
|
92 | // use to get focus back on opera | |
@@ -215,17 +214,33 b' var IPython = (function (IPython) {' | |||||
215 | } |
|
214 | } | |
216 | } |
|
215 | } | |
217 |
|
216 | |||
218 | this.complete = $('<div/>').addClass('completions'); |
|
217 | if (!this.visible) { | |
219 | this.complete.attr('id', 'complete'); |
|
218 | console.log('add div'); | |
220 |
|
219 | this.complete = $('<div/>').addClass('completions'); | ||
221 | // Currently webkit doesn't use the size attr correctly. See: |
|
220 | this.complete.attr('id', 'complete'); | |
222 | // https://code.google.com/p/chromium/issues/detail?id=4579 |
|
221 | ||
223 | this.sel = $('<select style="width: auto"/>') |
|
222 | // Currently webkit doesn't use the size attr correctly. See: | |
224 | .attr('tabindex', -1) |
|
223 | // https://code.google.com/p/chromium/issues/detail?id=4579 | |
225 | .attr('multiple', 'true') |
|
224 | this.sel = $('<select style="width: auto"/>') | |
226 | .attr('size', Math.min(10, this.raw_result.length)); |
|
225 | .attr('tabindex', -1) | |
227 | this.complete.append(this.sel); |
|
226 | .attr('multiple', 'true'); | |
228 |
|
|
227 | this.complete.append(this.sel); | |
|
228 | this.visible = true; | |||
|
229 | $('body').append(this.complete); | |||
|
230 | ||||
|
231 | //build the container | |||
|
232 | var that = this; | |||
|
233 | this.sel.dblclick(function () { | |||
|
234 | that.pick(); | |||
|
235 | }); | |||
|
236 | this.editor.on('keydown', function (event) { | |||
|
237 | that.keydown(event); | |||
|
238 | }); | |||
|
239 | this.editor.on('keypress', function (event) { | |||
|
240 | that.keypress(event); | |||
|
241 | }); | |||
|
242 | } | |||
|
243 | this.sel.attr('size', Math.min(10, this.raw_result.length)); | |||
229 |
|
244 | |||
230 | // After everything is on the page, compute the postion. |
|
245 | // After everything is on the page, compute the postion. | |
231 | // We put it above the code if it is too close to the bottom of the page. |
|
246 | // We put it above the code if it is too close to the bottom of the page. | |
@@ -243,26 +258,9 b' var IPython = (function (IPython) {' | |||||
243 | this.complete.css('left', left + 'px'); |
|
258 | this.complete.css('left', left + 'px'); | |
244 | this.complete.css('top', top + 'px'); |
|
259 | this.complete.css('top', top + 'px'); | |
245 |
|
260 | |||
246 |
|
261 | // Clear and fill the list. | ||
247 | //build the container |
|
262 | this.sel.text(''); | |
248 | var that = this; |
|
|||
249 | this.sel.dblclick(function () { |
|
|||
250 | that.pick(); |
|
|||
251 | }); |
|
|||
252 | this.editor.on('keydown', function (event) { |
|
|||
253 | that.keydown(event); |
|
|||
254 | }); |
|
|||
255 | this.editor.on('keypress', function (event) { |
|
|||
256 | that.keypress(event); |
|
|||
257 | }); |
|
|||
258 |
|
||||
259 | this.build_gui_list(this.raw_result); |
|
263 | this.build_gui_list(this.raw_result); | |
260 |
|
||||
261 | this.sel.focus(); |
|
|||
262 | // Opera sometimes ignores focusing a freshly created node |
|
|||
263 | if (window.opera) setTimeout(function () { |
|
|||
264 | if (!this.done) this.sel.focus(); |
|
|||
265 | }, 100); |
|
|||
266 | return true; |
|
264 | return true; | |
267 | }; |
|
265 | }; | |
268 |
|
266 | |||
@@ -282,15 +280,13 b' var IPython = (function (IPython) {' | |||||
282 | Completer.prototype.close = function () { |
|
280 | Completer.prototype.close = function () { | |
283 | this.done = true; |
|
281 | this.done = true; | |
284 | $('#complete').remove(); |
|
282 | $('#complete').remove(); | |
|
283 | this.visible = false; | |||
285 | }; |
|
284 | }; | |
286 |
|
285 | |||
287 | Completer.prototype.pick = function () { |
|
286 | Completer.prototype.pick = function () { | |
288 | this.insert(this.raw_result[this.sel[0].selectedIndex]); |
|
287 | this.insert(this.raw_result[this.sel[0].selectedIndex]); | |
289 | this.close(); |
|
288 | this.close(); | |
290 | var that = this; |
|
289 | var that = this; | |
291 | setTimeout(function () { |
|
|||
292 | that.editor.focus(); |
|
|||
293 | }, 50); |
|
|||
294 | }; |
|
290 | }; | |
295 |
|
291 | |||
296 | Completer.prototype.keydown = function (event) { |
|
292 | Completer.prototype.keydown = function (event) { | |
@@ -306,11 +302,9 b' var IPython = (function (IPython) {' | |||||
306 | else if (code == keycodes.esc) { |
|
302 | else if (code == keycodes.esc) { | |
307 | CodeMirror.e_stop(event); |
|
303 | CodeMirror.e_stop(event); | |
308 | this.close(); |
|
304 | this.close(); | |
309 | this.editor.focus(); |
|
|||
310 |
|
305 | |||
311 | } else if (code == keycodes.backspace) { |
|
306 | } else if (code == keycodes.backspace) { | |
312 | this.close(); |
|
307 | this.close(); | |
313 | this.editor.focus(); |
|
|||
314 | } else if (code == keycodes.tab) { |
|
308 | } else if (code == keycodes.tab) { | |
315 | //all the fastforwarding operation, |
|
309 | //all the fastforwarding operation, | |
316 | //Check that shared start is not null which can append with prefixed completion |
|
310 | //Check that shared start is not null which can append with prefixed completion | |
@@ -322,7 +316,6 b' var IPython = (function (IPython) {' | |||||
322 | } |
|
316 | } | |
323 | this.close(); |
|
317 | this.close(); | |
324 | CodeMirror.e_stop(event); |
|
318 | CodeMirror.e_stop(event); | |
325 | this.editor.focus(); |
|
|||
326 | //reinvoke self |
|
319 | //reinvoke self | |
327 | setTimeout(function () { |
|
320 | setTimeout(function () { | |
328 | that.carry_on_completion(); |
|
321 | that.carry_on_completion(); | |
@@ -340,7 +333,8 b' var IPython = (function (IPython) {' | |||||
340 | // This simulates the old behavior of completion as you type, |
|
333 | // This simulates the old behavior of completion as you type, | |
341 | // before events were disconnected and CodeMirror stopped |
|
334 | // before events were disconnected and CodeMirror stopped | |
342 | // receiving events while the completer is focused. |
|
335 | // receiving events while the completer is focused. | |
343 |
|
336 | if (!this.visible) return; | ||
|
337 | ||||
344 | var that = this; |
|
338 | var that = this; | |
345 | var code = event.keyCode; |
|
339 | var code = event.keyCode; | |
346 |
|
340 | |||
@@ -351,17 +345,7 b' var IPython = (function (IPython) {' | |||||
351 | code == keycodes.tab |
|
345 | code == keycodes.tab | |
352 | ) return; |
|
346 | ) return; | |
353 |
|
347 | |||
354 | var cur = this.editor.getCursor(); |
|
|||
355 | var completion = { |
|
|||
356 | str: String.fromCharCode(event.which), |
|
|||
357 | type: "introspection", |
|
|||
358 | from: cur, |
|
|||
359 | to: cur, |
|
|||
360 | }; |
|
|||
361 | this.insert(completion); |
|
|||
362 |
|
||||
363 | this.close(); |
|
348 | this.close(); | |
364 | this.editor.focus(); |
|
|||
365 | setTimeout(function () { |
|
349 | setTimeout(function () { | |
366 | that.carry_on_completion(); |
|
350 | that.carry_on_completion(); | |
367 | }, 50); |
|
351 | }, 50); |
General Comments 0
You need to be logged in to leave comments.
Login now