diff --git a/IPython/frontend/html/notebook/static/js/context-hint.js b/IPython/frontend/html/notebook/static/js/context-hint.js index d265c02..e109bdd 100644 --- a/IPython/frontend/html/notebook/static/js/context-hint.js +++ b/IPython/frontend/html/notebook/static/js/context-hint.js @@ -1,81 +1,92 @@ // highly adapted for codemiror jshint - -(function () { +(function() { "use strict"; + function forEach(arr, f) { for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]); } - + function arrayContains(arr, item) { if (!Array.prototype.indexOf) { var i = arr.length; while (i--) { - if (arr[i] === item) {return true;} + if (arr[i] === item) { + return true; + } } return false; } return arr.indexOf(item) != -1; } - + CodeMirror.contextHint = function(editor) { // Find the token at the cursor - var cur = editor.getCursor(), token = editor.getTokenAt(cur), tprop = token; + var cur = editor.getCursor(), + token = editor.getTokenAt(cur), + tprop = token; // If it's not a 'word-style' token, ignore the token. // If it is a property, find out what it is a property of. var list = new Array(); - var clist = getCompletions(token,editor); - for(var i = 0 ; i < clist.length ; i++) - { - list.push( - { str : clist[i], - type : "context", - from : {line: cur.line, ch: token.start}, - to : {line: cur.line, ch: token.end} }) + var clist = getCompletions(token, editor); + for (var i = 0; i < clist.length; i++) { + list.push({ + str: clist[i], + type: "context", + from: { + line: cur.line, + ch: token.start + }, + to: { + line: cur.line, + ch: token.end + } + }) } return list; } // find all 'words' of current cell - var getAllTokens = function(editor) - { - var found = []; + var getAllTokens = function(editor) { + var found = []; + + // add to found if not already in it - // add to found if not already in it - function maybeAdd(str) { - if (!arrayContains(found, str)) found.push(str); - } - // loop through all token on all lines - var lineCount = editor.lineCount(); - // loop on line - for( var l=0; l< lineCount ; l++) - { - var line = editor.getLine(l); - //loop on char - for( var c = 1 ; c < line.length ; c++) - { - var tk = editor.getTokenAt({line:l,ch:c}); - // if token has a class, it has geat chances of beeing - // of interest. Add it to the list of possible completions. - // we could skip token of ClassName 'comment' - // or 'number' and 'operator' - if(tk.className != null){ - maybeAdd(tk.string); + function maybeAdd(str) { + if (!arrayContains(found, str)) found.push(str); + } + + // loop through all token on all lines + var lineCount = editor.lineCount(); + // loop on line + for (var l = 0; l < lineCount; l++) { + var line = editor.getLine(l); + //loop on char + for (var c = 1; c < line.length; c++) { + var tk = editor.getTokenAt({ + line: l, + ch: c + }); + // if token has a class, it has geat chances of beeing + // of interest. Add it to the list of possible completions. + // we could skip token of ClassName 'comment' + // or 'number' and 'operator' + if (tk.className != null) { + maybeAdd(tk.string); + } + // jump to char after end of current token + c = tk.end; } - // jump to char after end of current token - c = tk.end; } + return found; } - return found; - } - function getCompletions(token,editor) - { + function getCompletions(token, editor) { var candidates = getAllTokens(editor); // filter all token that have a common start (but nox exactly) the lenght of the current token - var lambda = function(x){ - return (x.indexOf(token.string)==0 && x != token.string) + var lambda = function(x) { + return (x.indexOf(token.string) == 0 && x != token.string) }; var filterd = candidates.filter(lambda); return filterd;