##// END OF EJS Templates
use invoke instead of fabric...
use invoke instead of fabric it's the descendant of the part of fabric we actually use, it doesn't have complex compiled dependencies like fabric, and it works on Python 3.

File last commit:

r18280:80b3c9ff
r18351:0ab76370
Show More
contexthint.js
98 lines | 3.0 KiB | application/javascript | JavascriptLexer
Jonathan Frederic
MWE,...
r17200 // Copyright (c) IPython Development Team.
// Distributed under the terms of the Modified BSD License.
Matthias BUSSONNIER
implement the completer in a separate class...
r7131 // highly adapted for codemiror jshint
Matthias BUSSONNIER
Update to codemirror 4...
r18280 define(['codemirror/lib/codemirror'], function(CodeMirror) {
Matthias BUSSONNIER
fix and retab javascript
r7133 "use strict";
Matthias BUSSONNIER
beautify context-hint.js
r7194
Jonathan Frederic
MWE,...
r17200 var forEach = function(arr, f) {
Matthias BUSSONNIER
fix and retab javascript
r7133 for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]);
Jonathan Frederic
MWE,...
r17200 };
Matthias BUSSONNIER
beautify context-hint.js
r7194
Jonathan Frederic
MWE,...
r17200 var arrayContains = function(arr, item) {
Matthias BUSSONNIER
fix and retab javascript
r7133 if (!Array.prototype.indexOf) {
var i = arr.length;
while (i--) {
Matthias BUSSONNIER
beautify context-hint.js
r7194 if (arr[i] === item) {
return true;
}
Matthias BUSSONNIER
fix and retab javascript
r7133 }
return false;
}
return arr.indexOf(item) != -1;
Jonathan Frederic
MWE,...
r17200 };
Matthias BUSSONNIER
beautify context-hint.js
r7194
Matthias BUSSONNIER
space after function keyword in context-hint
r7195 CodeMirror.contextHint = function (editor) {
Matthias BUSSONNIER
fix and retab javascript
r7133 // Find the token at the cursor
Matthias BUSSONNIER
beautify context-hint.js
r7194 var cur = editor.getCursor(),
token = editor.getTokenAt(cur),
tprop = token;
Matthias BUSSONNIER
fix and retab javascript
r7133 // If it's not a 'word-style' token, ignore the token.
// If it is a property, find out what it is a property of.
Jonathan Frederic
MWE,...
r17200 var list = [];
Matthias BUSSONNIER
beautify context-hint.js
r7194 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
}
Jonathan Frederic
MWE,...
r17200 });
Matthias BUSSONNIER
fix and retab javascript
r7133 }
return list;
Jonathan Frederic
MWE,...
r17200 };
Matthias BUSSONNIER
implement the completer in a separate class...
r7131
Matthias BUSSONNIER
fix and retab javascript
r7133 // find all 'words' of current cell
Matthias BUSSONNIER
space after function keyword in context-hint
r7195 var getAllTokens = function (editor) {
Jonathan Frederic
MWE,...
r17200 var found = [];
Matthias BUSSONNIER
beautify context-hint.js
r7194
Jonathan Frederic
MWE,...
r17200 // add to found if not already in it
Matthias BUSSONNIER
be smarter for context completion...
r7140
Jonathan Frederic
MWE,...
r17200 function maybeAdd(str) {
if (!arrayContains(found, str)) found.push(str);
}
Matthias BUSSONNIER
beautify context-hint.js
r7194
Jonathan Frederic
MWE,...
r17200 // 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);
Matthias BUSSONNIER
be smarter for context completion...
r7140 }
Jonathan Frederic
MWE,...
r17200 // jump to char after end of current token
c = tk.end;
Matthias BUSSONNIER
be smarter for context completion...
r7140 }
Matthias BUSSONNIER
fix and retab javascript
r7133 }
Jonathan Frederic
MWE,...
r17200 return found;
};
Matthias BUSSONNIER
implement the completer in a separate class...
r7131
Jonathan Frederic
MWE,...
r17200 var getCompletions = function(token, editor) {
Matthias BUSSONNIER
fix and retab javascript
r7133 var candidates = getAllTokens(editor);
// filter all token that have a common start (but nox exactly) the lenght of the current token
Matthias BUSSONNIER
space after function keyword in context-hint
r7195 var lambda = function (x) {
Jonathan Frederic
MWE,...
r17200 return (x.indexOf(token.string) === 0 && x != token.string);
Matthias BUSSONNIER
fix and retab javascript
r7133 };
var filterd = candidates.filter(lambda);
return filterd;
Jonathan Frederic
MWE,...
r17200 };
Jonathan Frederic
Return dicts instead of classes,...
r17201 return {'contextHint': CodeMirror.contextHint};
Jonathan Frederic
MWE,...
r17200 });