##// END OF EJS Templates
use strict and clean a little....
use strict and clean a little. adding 'use strict' in some place to be more agressive on the delaration of the variables. clean name and details here and there

File last commit:

r7132:51f85c6a
r7132:51f85c6a
Show More
context-hint.js
90 lines | 2.4 KiB | application/javascript | JavascriptLexer
// highly adapted for codemiror jshint
(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;
}
}
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;
// 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}
}
)
}
return list;
}
// find all 'words' of current cell
function getAllTokens(editor)
{
var found = [];
// get all text remove and split it before dot and at space
// keep the dot for completing token that also start with dot
var candidates = editor.getValue()
.replace(/[. ]/g,"\n")
.split('\n');
// append to arry if not already (the function)
function maybeAdd(str) {
if (!arrayContains(found, str)) found.push(str);
}
// append to arry if not already
// (here we do it )
for( var c in candidates )
{
if(candidates[c].length >= 1){
maybeAdd(candidates[c]);}
}
return found;
}
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 prependchar ='';
if(token.string.indexOf('.') == 0)
{
prependchar = '.'
}
var lambda = function(x){
x = prependchar+x;
return (x.indexOf(token.string)==0 && x != token.string)};
var filterd = candidates.filter(lambda);
for( var i in filterd)
{
// take care of reappending '.' at the beginning
filterd[i] = prependchar+filterd[i];
}
return filterd;
}
})();