var PLUGIN_INFO =
{NAME}
Scala API document
Scala API を検索し、補完します。
2.0pre
2.0pre
http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/scalapi.js
Yuichi Tateno
MPL 1.1/GPL 2.0/LGPL 2.1
0.1
;
(function() {
var p = function(arg) {
Application.console.log(arg);
// liberator.log(arg);
};
var scalaApiURL = liberator.globalVariables.scalaApiURL || 'http://www.scala-lang.org/docu/files/api/';
if (!liberator.globalVariables.scalaApiCache) {
let xhr = new XMLHttpRequest();
let regex = new RegExp('([^.]+)', 'g');
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
let text = xhr.responseText;
let res = [];
res.hashMap = {};
text.replace(regex, function(m) {
let path = RegExp.$1;
let name = path.replace('$object', '');
name = name.replace(/\//g, '.');
res.push([name, path]);
res.hashMap[name] = path;
});
liberator.globalVariables.scalaApiCache = res;
} else {
liberator.echoerr('Scala API : XHR Error: ' + xhr.statusText);
// throw new Error(xhr.statusText);
}
}
};
xhr.open('GET', scalaApiURL + 'all-classes.html', true);
xhr.send(null);
}
commands.addUserCommand(
liberator.globalVariables.scalaApiCommands || ['scalapi', 'sc'],
'Scala API Search',
function(args) {
var name = (args.string || '');
var url = (name && liberator.globalVariables.scalaApiCache.hashMap[name]) ? scalaApiURL + 'scala/' + liberator.globalVariables.scalaApiCache.hashMap[name] + '.html' : scalaApiURL + 'index.html';
liberator.open(url, args.bang ? liberator.NEW_TAB : null);
}, {
completer: function(context) {
context.title = ['API Name', 'API'];
var word = context.filter;// .toUpperCase();
/*
if (word.indexOf('.') >= 0) {
let regex = word.split(/\.+/).map(function(i) i + '[^.]*').join('.');
p(regex);
regex = new RegExp('^' + regex.replace(/\[\^\.\]\*$/, ''));
p(regex);
context.filters = [function(item) regex.test(item.item[0])];
} else {
context.filters = [function(item) item.item[0].toUpperCase().indexOf(word) != -1];
}
*/
try {
var regex = new RegExp(word, 'i');
context.filters = [function(item) regex.test(item.item[0])];
} catch(e) {
var word = context.filter.toUpperCase();
context.filters = [function(item) item.item[0].toUpperCase().indexOf(word) != -1];
}
context.completions = liberator.globalVariables.scalaApiCache || [];
},
argCount: '*',
bang: true
},
true
);
})();