2015-02-13 23:41:22 +00:00
|
|
|
define(function(require, exports, module) {
|
|
|
|
main.consumes = [
|
|
|
|
"Plugin", "ui", "menus", "info", "layout", "http", "util",
|
|
|
|
"vfs.endpoint", "auth", "dialog.alert", "c9"
|
|
|
|
];
|
|
|
|
main.provides = ["login"];
|
|
|
|
return main;
|
|
|
|
|
|
|
|
function main(options, imports, register) {
|
|
|
|
var Plugin = imports.Plugin;
|
|
|
|
var ui = imports.ui;
|
|
|
|
var c9 = imports.c9;
|
|
|
|
var menus = imports.menus;
|
|
|
|
var layout = imports.layout;
|
|
|
|
var http = imports.http;
|
|
|
|
var util = imports.util;
|
|
|
|
var info = imports.info;
|
|
|
|
var auth = imports.auth;
|
|
|
|
var alert = imports["dialog.alert"].show;
|
|
|
|
|
|
|
|
var vfsEndpoint = imports["vfs.endpoint"];
|
|
|
|
|
|
|
|
/***** Initialization *****/
|
|
|
|
|
|
|
|
var ideBaseUrl = options.ideBaseUrl;
|
|
|
|
var dashboardUrl = options.dashboardUrl;
|
|
|
|
var accountUrl = options.accountUrl;
|
|
|
|
var lastUser, mnuUser;
|
|
|
|
|
|
|
|
var plugin = new Plugin("Ajax.org", main.consumes);
|
|
|
|
var emit = plugin.getEmitter();
|
|
|
|
|
|
|
|
var loaded = false;
|
|
|
|
function load() {
|
|
|
|
if (loaded) return false;
|
|
|
|
loaded = true;
|
|
|
|
|
|
|
|
info.getUser(function(err, user) {
|
|
|
|
updateButton({user: user});
|
|
|
|
});
|
|
|
|
|
|
|
|
auth.on("relogin", onReLogin);
|
|
|
|
}
|
|
|
|
|
|
|
|
/***** Methods *****/
|
|
|
|
|
|
|
|
function updateButton(e) {
|
|
|
|
var user = e.user;
|
|
|
|
if (lastUser && lastUser.id == user.id)
|
|
|
|
return;
|
|
|
|
plugin.cleanUp();
|
|
|
|
info.on("change", updateButton, plugin);
|
|
|
|
createButton(user);
|
|
|
|
lastUser = user;
|
|
|
|
|
|
|
|
emit.sticky("ready", { name: user.fullname, id: user.id }, plugin);
|
|
|
|
}
|
|
|
|
|
|
|
|
function createButton(user) {
|
|
|
|
var name = "user_" + user.id;
|
|
|
|
|
|
|
|
// todo cleanup seems to not work well
|
|
|
|
// without this menu is empty after logging out and back in
|
|
|
|
if (lastUser)
|
|
|
|
menus.remove("user_" + lastUser.id);
|
|
|
|
menus.remove(name);
|
|
|
|
|
|
|
|
var parent = layout.findParent(plugin);
|
|
|
|
|
|
|
|
// Insert CSS
|
|
|
|
ui.insertCss(require("text!./login.css"), plugin);
|
|
|
|
|
|
|
|
// Create Menu
|
|
|
|
mnuUser = new ui.menu();
|
|
|
|
plugin.addElement(mnuUser);
|
|
|
|
|
|
|
|
// Add named button
|
|
|
|
var icon = util.getGravatarUrl(user.email, 32, "");
|
|
|
|
menus.addItemByPath(name + "/", mnuUser, 110000, plugin);
|
|
|
|
|
|
|
|
// Add Divider
|
|
|
|
ui.insertByIndex(parent, new ui.divider({
|
|
|
|
skin: "c9-divider-double",
|
|
|
|
"class" : "extrasdivider"
|
|
|
|
}), 870, plugin);
|
|
|
|
|
|
|
|
// Add sub menu items
|
|
|
|
var c = 500;
|
|
|
|
menus.addItemByPath(name + "/Dashboard", new ui.item({
|
|
|
|
onclick: function() { window.open(dashboardUrl); }
|
|
|
|
}), c += 100, plugin);
|
|
|
|
menus.addItemByPath(name + "/Account", new ui.item({
|
|
|
|
onclick: function() { window.open(accountUrl); }
|
|
|
|
}), c += 100, plugin);
|
|
|
|
menus.addItemByPath(name + "/Home", new ui.item({
|
|
|
|
onclick: function() { window.open(ideBaseUrl); }
|
|
|
|
}), c += 100, plugin);
|
|
|
|
|
|
|
|
if (!options.noLogout) {
|
|
|
|
menus.addItemByPath(name + "/~", new ui.divider(), c += 100, plugin);
|
|
|
|
menus.addItemByPath(name + "/Log out", new ui.item({
|
|
|
|
onclick: function() {
|
|
|
|
if (!c9.local)
|
|
|
|
return signout();
|
|
|
|
auth.logout(function() {
|
|
|
|
info.login(true);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}), c += 100, plugin);
|
|
|
|
}
|
|
|
|
|
|
|
|
var button = menus.get(name).item;
|
|
|
|
button.setAttribute("class", "btnName");
|
|
|
|
button.setAttribute("icon", icon);
|
|
|
|
button.setAttribute("iconsize", "16px 16px");
|
|
|
|
button.setAttribute("tooltip", user.fullname);
|
|
|
|
button.setAttribute("caption", user.fullname);
|
|
|
|
ui.insertByIndex(parent, button, 600, plugin);
|
|
|
|
|
|
|
|
if (c9.local) {
|
|
|
|
function minimize(){
|
|
|
|
apf.document.documentElement.appendChild(button);
|
|
|
|
ui.setStyleClass(button.$ext, "titlebar");
|
|
|
|
}
|
|
|
|
function restore(){
|
|
|
|
ui.insertByIndex(parent, button, 870, plugin);
|
|
|
|
ui.setStyleClass(button.$ext, "", ["titlebar"]);
|
|
|
|
}
|
|
|
|
|
|
|
|
menus.on("minimize", minimize, plugin);
|
|
|
|
menus.on("restore", restore, plugin);
|
|
|
|
|
|
|
|
if (menus.minimized)
|
|
|
|
minimize();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function signout() {
|
|
|
|
vfsEndpoint.clearCache();
|
2015-10-28 14:45:53 +00:00
|
|
|
auth.logout(ideBaseUrl);
|
2015-02-13 23:41:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function onReLogin() {
|
|
|
|
if (!c9.local) {
|
|
|
|
alert("Logged out",
|
|
|
|
"You have been logged in as a different user",
|
|
|
|
"Please hit OK to reload the IDE.",
|
|
|
|
function() {
|
|
|
|
vfsEndpoint.clearCache();
|
2015-10-28 14:45:53 +00:00
|
|
|
auth.logout();
|
2015-02-13 23:41:22 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/***** Lifecycle *****/
|
|
|
|
|
|
|
|
plugin.on("load", function() {
|
|
|
|
load();
|
|
|
|
});
|
|
|
|
plugin.on("enable", function() {
|
|
|
|
|
|
|
|
});
|
|
|
|
plugin.on("disable", function() {
|
|
|
|
|
|
|
|
});
|
|
|
|
plugin.on("unload", function() {
|
|
|
|
loaded = false;
|
|
|
|
});
|
|
|
|
|
|
|
|
/***** Register and define API *****/
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
**/
|
|
|
|
plugin.freezePublicAPI({
|
|
|
|
get menu(){ return mnuUser; },
|
|
|
|
|
|
|
|
_events: [
|
|
|
|
/**
|
|
|
|
* @event ready
|
|
|
|
*/
|
|
|
|
"ready"
|
|
|
|
],
|
|
|
|
createButton: createButton,
|
|
|
|
updateButton: updateButton
|
|
|
|
});
|
|
|
|
|
|
|
|
register(null, {
|
|
|
|
login: plugin
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|