Page MenuHomePhabricator

D11360.id27293.diff
No OneTemporary

D11360.id27293.diff

diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -8,7 +8,7 @@
return array(
'names' => array(
'core.pkg.css' => '60a6d241',
- 'core.pkg.js' => '61af8961',
+ 'core.pkg.js' => 'ee4b7b42',
'darkconsole.pkg.js' => '8ab24e01',
'differential.pkg.css' => '8af45893',
'differential.pkg.js' => 'dad3622f',
@@ -342,9 +342,9 @@
'rsrc/image/texture/table_header.png' => '5c433037',
'rsrc/image/texture/table_header_hover.png' => '038ec3b9',
'rsrc/image/texture/table_header_tall.png' => 'd56b434f',
- 'rsrc/js/application/aphlict/Aphlict.js' => '464d333a',
- 'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => 'f6bc26f0',
- 'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => '1162a152',
+ 'rsrc/js/application/aphlict/Aphlict.js' => 'daa6ca29',
+ 'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => '1d8508e2',
+ 'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => '0ca60207',
'rsrc/js/application/aphlict/behavior-aphlict-status.js' => '58f7803f',
'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18',
'rsrc/js/application/config/behavior-reorder-fields.js' => '14a827de',
@@ -535,10 +535,10 @@
'herald-rule-editor' => '335fd41f',
'herald-test-css' => '778b008e',
'inline-comment-summary-css' => '8cfd34e8',
- 'javelin-aphlict' => '464d333a',
+ 'javelin-aphlict' => 'daa6ca29',
'javelin-behavior' => '61cbc29a',
- 'javelin-behavior-aphlict-dropdown' => 'f6bc26f0',
- 'javelin-behavior-aphlict-listen' => '1162a152',
+ 'javelin-behavior-aphlict-dropdown' => '1d8508e2',
+ 'javelin-behavior-aphlict-listen' => '0ca60207',
'javelin-behavior-aphlict-status' => '58f7803f',
'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884',
'javelin-behavior-aphront-crop' => 'fa0f4fc2',
@@ -893,6 +893,19 @@
'javelin-util',
'phabricator-notification-css',
),
+ '0ca60207' => array(
+ 'javelin-behavior',
+ 'javelin-aphlict',
+ 'javelin-stratcom',
+ 'javelin-request',
+ 'javelin-uri',
+ 'javelin-dom',
+ 'javelin-json',
+ 'javelin-router',
+ 'javelin-util',
+ 'javelin-leader',
+ 'phabricator-notification',
+ ),
'0ec56e1d' => array(
'javelin-behavior',
'javelin-dom',
@@ -908,18 +921,6 @@
'javelin-uri',
'javelin-install',
),
- '1162a152' => array(
- 'javelin-behavior',
- 'javelin-aphlict',
- 'javelin-stratcom',
- 'javelin-request',
- 'javelin-uri',
- 'javelin-dom',
- 'javelin-json',
- 'javelin-router',
- 'javelin-util',
- 'phabricator-notification',
- ),
'13c739ea' => array(
'javelin-behavior',
'javelin-stratcom',
@@ -956,6 +957,16 @@
'javelin-util',
'phabricator-keyboard-shortcut-manager',
),
+ '1d8508e2' => array(
+ 'javelin-behavior',
+ 'javelin-request',
+ 'javelin-stratcom',
+ 'javelin-vector',
+ 'javelin-dom',
+ 'javelin-uri',
+ 'javelin-behavior-device',
+ 'phabricator-title',
+ ),
'1def2711' => array(
'javelin-install',
'javelin-dom',
@@ -1087,13 +1098,6 @@
'javelin-behavior',
'javelin-dom',
),
- '464d333a' => array(
- 'javelin-install',
- 'javelin-util',
- 'javelin-websocket',
- 'javelin-leader',
- 'javelin-json',
- ),
'469c0d9e' => array(
'javelin-behavior',
'javelin-dom',
@@ -1741,6 +1745,13 @@
'javelin-util',
'phabricator-shaped-request',
),
+ 'daa6ca29' => array(
+ 'javelin-install',
+ 'javelin-util',
+ 'javelin-websocket',
+ 'javelin-leader',
+ 'javelin-json',
+ ),
'dd7e8ef5' => array(
'javelin-behavior',
'javelin-dom',
@@ -1897,16 +1908,6 @@
'javelin-util',
'javelin-reactor',
),
- 'f6bc26f0' => array(
- 'javelin-behavior',
- 'javelin-request',
- 'javelin-stratcom',
- 'javelin-vector',
- 'javelin-dom',
- 'javelin-uri',
- 'javelin-behavior-device',
- 'phabricator-title',
- ),
'f7379f45' => array(
'javelin-behavior',
'javelin-dom',
diff --git a/webroot/rsrc/js/application/aphlict/Aphlict.js b/webroot/rsrc/js/application/aphlict/Aphlict.js
--- a/webroot/rsrc/js/application/aphlict/Aphlict.js
+++ b/webroot/rsrc/js/application/aphlict/Aphlict.js
@@ -119,6 +119,10 @@
var handler = this.getHandler();
handler && handler(message.data);
break;
+ case 'notification.individual':
+ var renderer = this.getRenderer();
+ renderer && renderer(message.data);
+ break;
}
},
@@ -134,7 +138,8 @@
},
properties: {
- handler: null
+ handler: null,
+ renderer: null
},
statics: {
diff --git a/webroot/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js b/webroot/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js
--- a/webroot/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js
+++ b/webroot/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js
@@ -37,7 +37,8 @@
true);
}
- if (request) { //already fetching
+ if (request) {
+ // Already fetching.
return;
}
diff --git a/webroot/rsrc/js/application/aphlict/behavior-aphlict-listen.js b/webroot/rsrc/js/application/aphlict/behavior-aphlict-listen.js
--- a/webroot/rsrc/js/application/aphlict/behavior-aphlict-listen.js
+++ b/webroot/rsrc/js/application/aphlict/behavior-aphlict-listen.js
@@ -9,6 +9,7 @@
* javelin-json
* javelin-router
* javelin-util
+ * javelin-leader
* phabricator-notification
*/
@@ -23,9 +24,24 @@
return;
}
+ JX.Leader.callIfLeader(function() {
+ requestNotification(message);
+ });
+ });
+
+ // Respond to a notification from the Aphlict notification server. We send
+ // a request to Phabricator to get notification details.
+ function onAphlictMessage(message) {
+ JX.Stratcom.invoke('aphlict-receive-message', null, message);
+ }
+
+ // Request the individual notification. This function is only called by the
+ // leader tab, which then broadcasts the notification content back to all
+ // other tabs.
+ function requestNotification(message) {
var request = new JX.Request(
- '/notification/individual/',
- onnotification);
+ '/notification/individual/',
+ receiveNotification);
var routable = request
.addData({key: message.key})
@@ -36,22 +52,22 @@
.setPriority(250);
JX.Router.getInstance().queue(routable);
- });
-
-
- // Respond to a notification from the Aphlict notification server. We send
- // a request to Phabricator to get notification details.
- function onaphlictmessage(message) {
- JX.Stratcom.invoke('aphlict-receive-message', null, message);
}
-
- // Respond to a response from Phabricator about a specific notification.
- function onnotification(response) {
+ // Receive the individual notification and broadcast it to all other tabs.
+ function receiveNotification(response) {
if (!response.pertinent) {
return;
}
+ JX.Leader.broadcast(null, {
+ type: 'notification.individual',
+ data: response
+ });
+ }
+
+ // Respond to a response from Phabricator about a specific notification.
+ function onAphlictNotification(response) {
JX.Stratcom.invoke('notification-panel-update', null, {});
// Show the notification itself.
@@ -59,9 +75,8 @@
.setContent(JX.$H(response.content))
.show();
-
- // If the notification affected an object on this page, show a
- // permanent reload notification if we aren't already.
+ // If the notification affected an object on this page, show a permanent
+ // reload notification if we aren't already.
if ((response.primaryObjectPHID in config.pageObjects) && !showing_reload) {
var reload = new JX.Notification()
.setContent('Page updated, click to reload.')
@@ -79,7 +94,8 @@
config.subscriptions);
client
- .setHandler(onaphlictmessage)
+ .setHandler(onAphlictMessage)
+ .setRenderer(onAphlictNotification)
.start();
});

File Metadata

Mime Type
text/plain
Expires
Mar 16 2025, 1:53 AM (5 w, 3 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7705058
Default Alt Text
D11360.id27293.diff (8 KB)

Event Timeline