kopia lustrzana https://github.com/c9/core
174 wiersze
6.2 KiB
JavaScript
174 wiersze
6.2 KiB
JavaScript
/*global nativeRequire*/
|
|
define(function(require, exports, module) {
|
|
main.consumes = [
|
|
"c9", "Plugin", "info", "menus", "ui", "commands", "login",
|
|
"auth", "settings", "api"
|
|
];
|
|
main.provides = ["projectManager"];
|
|
return main;
|
|
|
|
function main(options, imports, register) {
|
|
var commands = imports.commands;
|
|
var Plugin = imports.Plugin;
|
|
var menus = imports.menus;
|
|
var login = imports.login;
|
|
var info = imports.info;
|
|
var api = imports.api;
|
|
var ui = imports.ui;
|
|
var c9 = imports.c9;
|
|
|
|
/***** Initialization *****/
|
|
|
|
var plugin = new Plugin("Ajax.org", main.consumes);
|
|
// var emit = plugin.getEmitter();
|
|
var updating = {};
|
|
|
|
var loaded = false;
|
|
function load() {
|
|
if (loaded) return false;
|
|
loaded = true;
|
|
|
|
commands.addCommand({
|
|
name: "newWorkspace",
|
|
exec: function() {
|
|
window.open(c9.dashboardUrl + "/../new");
|
|
}
|
|
}, plugin);
|
|
|
|
login.on("ready", function(e) {
|
|
var name = "user_" + e.id;
|
|
var c = 0;
|
|
|
|
menus.addItemByPath(name + "/My Workspaces/", new ui.menu({
|
|
"onprop.visible": function(e) {
|
|
if (e.value) updateC9Projects("");
|
|
},
|
|
"onitemclick": function(e) {
|
|
var options = e.relatedNode.value;
|
|
if (options) {
|
|
window.open("/" + options.name);
|
|
}
|
|
}
|
|
}), c += 100, plugin);
|
|
|
|
menus.addItemByPath(name + "/Shared Workspaces/", new ui.menu({
|
|
"onprop.visible": function(e) {
|
|
if (e.value) updateC9Projects("/shared");
|
|
},
|
|
"onitemclick": function(e) {
|
|
var options = e.relatedNode.value;
|
|
if (options) {
|
|
window.open("/" + options.name);
|
|
}
|
|
}
|
|
}), c += 100, plugin);
|
|
|
|
|
|
menus.addItemByPath(name + "/New Workspace", new ui.item({
|
|
command: "newWorkspace"
|
|
}), c += 100, plugin);
|
|
|
|
addDisabled(name, "/My Workspaces/Loading workspace list...");
|
|
addDisabled(name, "/Shared Workspaces/Loading workspace list...");
|
|
|
|
// menus.addItemByPath(name + "/Projects/~", new ui.divider(), c += 100, plugin);
|
|
menus.addItemByPath(name + "/~", new ui.divider(), c += 100, plugin);
|
|
});
|
|
|
|
function updateC9Projects(type) {
|
|
if (updating[type] - Date.now() < 500)
|
|
return;
|
|
updating[type] = Date.now();
|
|
info.getUser(function(err, user) {
|
|
if (err) return console.error(err);
|
|
api.user.get("projects" + type, function(err, projects) {
|
|
var c = 0;
|
|
var name = "user_" + user.id;
|
|
var menuName = name + (type ? "/Shared Workspaces/" : "/My Workspaces/");
|
|
menus.remove(menuName);
|
|
|
|
if (err || !projects) {
|
|
menus.addItemByPath(menuName + "Error while loading workspace list",
|
|
new ui.item({ disabled: true }), c, plugin);
|
|
return;
|
|
}
|
|
|
|
if (projects && projects.length) {
|
|
projects.map(function(x) {
|
|
return {
|
|
name: x.owner.name + "/" + x.name,
|
|
projectName: x.name,
|
|
pid: x.pid,
|
|
isRemote: true,
|
|
};
|
|
}).sort(function(a, b) {
|
|
return a.name.localeCompare(b.name);
|
|
}).forEach(function (x) {
|
|
addMenuItem(menuName, x, c += 100);
|
|
});
|
|
} else {
|
|
addDisabled(menuName, type
|
|
? "You have no Shared workspaces"
|
|
: "You have no workspaces");
|
|
}
|
|
|
|
updating[type] = Date.now();
|
|
var data = menus.get(menuName.slice(0, -1));
|
|
if (data.menu.visible)
|
|
data.item.$submenu();
|
|
});
|
|
});
|
|
}
|
|
|
|
function addMenuItem(menu, value, c) {
|
|
menus.addItemByPath(menu + menus.escape(value.name),
|
|
new ui.item({ value: value }), c || 0, plugin);
|
|
}
|
|
|
|
function addDisabled(name, path) {
|
|
menus.addItemByPath(name + path,
|
|
new ui.item({ disabled: true }), 0, plugin);
|
|
}
|
|
}
|
|
|
|
/***** Methods *****/
|
|
|
|
|
|
/***** Lifecycle *****/
|
|
|
|
plugin.on("load", function() {
|
|
load();
|
|
});
|
|
plugin.on("enable", function() {
|
|
|
|
});
|
|
plugin.on("disable", function() {
|
|
|
|
});
|
|
plugin.on("unload", function() {
|
|
loaded = false;
|
|
updating = {};
|
|
});
|
|
|
|
/***** Register and define API *****/
|
|
|
|
/**
|
|
* Draws the file tree
|
|
* @event afterfilesave Fires after a file is saved
|
|
* @param {Object} e
|
|
* node {XMLNode} description
|
|
* oldpath {String} description
|
|
**/
|
|
plugin.freezePublicAPI({
|
|
/**
|
|
*
|
|
*/
|
|
|
|
});
|
|
|
|
register(null, {
|
|
projectManager: plugin
|
|
});
|
|
}
|
|
});
|