kopia lustrzana https://github.com/c9/core
147 wiersze
5.2 KiB
JavaScript
147 wiersze
5.2 KiB
JavaScript
define(function(require, exports, module) {
|
|
main.consumes = [
|
|
"Plugin", "preferences", "ui", "Datagrid", "settings",
|
|
"preferences.experimental", "language.tern"
|
|
];
|
|
main.provides = ["language.tern.ui"];
|
|
return main;
|
|
|
|
function main(options, imports, register) {
|
|
var Plugin = imports.Plugin;
|
|
var prefs = imports.preferences;
|
|
var ui = imports.ui;
|
|
var settings = imports.settings;
|
|
var Datagrid = imports.Datagrid;
|
|
var tern = imports["language.tern"];
|
|
var plugin = new Plugin("Ajax.org", main.consumes);
|
|
|
|
var datagrid;
|
|
var defs;
|
|
|
|
var loaded = false;
|
|
function load() {
|
|
if (loaded) return;
|
|
loaded = true;
|
|
|
|
prefs.add({
|
|
"Project": {
|
|
"JavaScript Support": {
|
|
position: 1100,
|
|
"Tern Completions": {
|
|
position: 220,
|
|
type: "custom",
|
|
name: "ternCompletions",
|
|
node: new ui.bar({
|
|
style: "padding:10px"
|
|
})
|
|
},
|
|
}
|
|
}
|
|
}, plugin);
|
|
|
|
plugin.getElement("ternCompletions", initPreferences);
|
|
}
|
|
|
|
function initPreferences(elem) {
|
|
var container = elem.$ext.appendChild(document.createElement("div"));
|
|
datagrid = new Datagrid({
|
|
container: container,
|
|
enableCheckboxes: true,
|
|
emptyMessage: "Loading...",
|
|
minLines: 3,
|
|
maxLines: 10,
|
|
sort: function(array) {
|
|
return array.sort(function compare(a, b) {
|
|
if (a.label === "Main")
|
|
return -1;
|
|
return a.label.toLowerCase() > b.label.toLowerCase() ? 1 : -1;
|
|
});
|
|
},
|
|
columns: [
|
|
{
|
|
caption: "JavaScript Library Code Completion",
|
|
value: "name",
|
|
width: "100%",
|
|
type: "tree"
|
|
},
|
|
// {
|
|
// caption: "Description",
|
|
// value: "description",
|
|
// width: "65%",
|
|
// }
|
|
],
|
|
}, plugin);
|
|
|
|
var getCheckboxHTML = datagrid.getCheckboxHTML;
|
|
datagrid.getCheckboxHTML = function(node) {
|
|
return ["Main", "Experimental"].indexOf(node.label) > -1
|
|
? ""
|
|
: getCheckboxHTML(node);
|
|
};
|
|
|
|
datagrid.once("draw", function() {
|
|
tern.once("ready", function() {
|
|
var config = settings.getJson("project/language/tern_defs");
|
|
defs = tern.getDefs();
|
|
datagrid.on("check", onChange.bind(null, true));
|
|
datagrid.on("uncheck", onChange.bind(null, false));
|
|
datagrid.setRoot([
|
|
{
|
|
label: "Main",
|
|
description: "",
|
|
items: Object.keys(defs)
|
|
.filter(function(d) { return !defs[d].hidden && !defs[d].experimental; })
|
|
.map(toCheckbox)
|
|
},
|
|
{
|
|
label: "Experimental",
|
|
description: "",
|
|
items: Object.keys(defs)
|
|
.filter(function(d) { return !defs[d].hidden && defs[d].experimental; })
|
|
.map(toCheckbox)
|
|
}
|
|
]);
|
|
datagrid.open(datagrid.root[0]);
|
|
|
|
function toCheckbox(def) {
|
|
return {
|
|
label: def,
|
|
description: '<a href="' + defs[def].url + '">' + defs[def].url + '</a>',
|
|
isChecked: config[def] && config[def].enabled,
|
|
};
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function onChange(value, nodes) {
|
|
var config = settings.getJson("project/language/tern_defs");
|
|
nodes.forEach(function(n) {
|
|
tern.setDefEnabled(n.label, n.isChecked);
|
|
if (n.isChecked)
|
|
config[n.label] = { enabled: true };
|
|
else
|
|
config[n.label] = { enabled: false };
|
|
});
|
|
settings.setJson("project/language/tern_defs", config);
|
|
}
|
|
|
|
plugin.on("load", load);
|
|
plugin.on("unload", function() {
|
|
loaded = false;
|
|
datagrid = null;
|
|
defs = null;
|
|
});
|
|
|
|
plugin.freezePublicAPI({
|
|
});
|
|
|
|
/**
|
|
* Tern-based code completion for Cloud9.
|
|
*/
|
|
register(null, {
|
|
"language.tern.ui": plugin
|
|
});
|
|
}
|
|
|
|
}); |