c9-core/plugins/c9.ide.collab/notifications/bubble.js

122 wiersze
3.3 KiB
JavaScript

define(function(require, exports, module) {
main.consumes = [
"Plugin", "ui", "layout", "menus", "preferences", "settings"
];
main.provides = ["notification.bubble"];
return main;
function main(options, imports, register) {
var Plugin = imports.Plugin;
var ui = imports.ui;
var menus = imports.menus;
var layout = imports.layout;
var settings = imports.settings;
var prefs = imports.preferences;
/***** Initialization *****/
var plugin = new Plugin("Ajax.org", main.consumes);
var skin = require("text!./skin.xml");
var markup = require("text!./bubble.xml");
var emit = plugin.getEmitter();
var ntNotifications;
var loaded = false;
function load() {
if (loaded) return false;
loaded = true;
settings.on("read", function() {
settings.setDefaults("user/collab", [["showbubbles", true]]);
});
prefs.add({
"General": {
"Collaboration": {
"Show Notification Bubbles": {
type: "checkbox",
position: 1000,
path: "user/collab/@showbubbles"
}
}
}
}, plugin);
}
var drawn = false;
function draw() {
if (drawn) return;
drawn = true;
ui.insertSkin({
name: "bubble",
data: skin,
}, plugin);
ui.insertMarkup(layout.findParent(plugin), markup, plugin);
ntNotifications = plugin.getElement("ntNotifications");
ntNotifications.on("closed", function(e) {
emit("closed", { html: e.html });
});
emit("draw");
}
/***** Methods *****/
function popup(message, persistent, callback) {
if (!settings.getBool("user/collab/@showbubbles"))
return;
draw();
if (ntNotifications.showing > 4)
return;
if (menus.minimized)
ntNotifications.setAttribute("start-padding", 25);
else
ntNotifications.setAttribute("start-padding", 45);
return ntNotifications.popup(message, null, null, persistent, callback);
}
/***** Lifecycle *****/
plugin.on("load", function() {
load();
});
plugin.on("enable", function() {
});
plugin.on("disable", function() {
});
plugin.on("unload", function() {
loaded = false;
drawn = false;
});
/***** Register and define API *****/
/**
* Bubble volatile notifications for CLoud9
**/
plugin.freezePublicAPI({
/**
*
*/
popup: popup,
_events: [
/**
* @event draw
*/
"draw"
]
});
register(null, {
"notification.bubble": plugin
});
}
});