1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-09-21 01:38:48 +02:00
phorge-phorge/webroot/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js
David Fisher f8f195b329 Make Notifications Realtime
Summary:
Adds the node.js Aphlict server, the flash Aphlict client, and some
supporting javascript. Built on top of - and requires - D2703 (which is still
in progress).  Will likely work with no modification on top of the final
version, though.

The node server is currently run with

   sudo node support/aphlict/server/aphlict_server.js

Test Plan: tested locally

Reviewers: epriestley

Reviewed By: epriestley

CC: allenjohnashton, keebuhm, aran, Korvin

Differential Revision: https://secure.phabricator.com/D2704
2012-06-11 17:51:12 -07:00

67 lines
1.5 KiB
JavaScript

/**
* @provides javelin-behavior-aphlict-dropdown
* @requires javelin-behavior
* javelin-aphlict
* javelin-util
* javelin-request
* javelin-stratcom
*/
JX.behavior('aphlict-dropdown', function(config) {
var dropdown = JX.$('phabricator-notification-dropdown');
var indicator = JX.$('phabricator-notification-indicator');
var visible = false;
var request = null;
function refresh() {
if (request) { //already fetching
return;
}
request = new JX.Request('/notification/panel/', function(response) {
indicator.textContent = '' + response.number;
if (response.number == 0) {
indicator.style.fontWeight = "";
} else {
indicator.style.fontWeight = "bold";
}
JX.DOM.setContent(dropdown, JX.$H(response.content));
request = null;
});
request.send();
}
//populate panel
refresh();
JX.Stratcom.listen(
'click',
null,
function(e) {
if(e.getNode('aphlict-dropdown') ||
e.getNode('aphlict-indicator')) {
// Click is inside the dropdown, or on indicator
return;
}
JX.DOM.hide(dropdown);
visible = false;
});
JX.DOM.listen(
indicator,
'click',
null,
function(e) {
if(visible) {
JX.DOM.hide(dropdown);
} else {
JX.DOM.show(dropdown);
}
visible = !visible;
}
)
JX.Stratcom.listen('notification-panel-update', null, refresh);
});