Page MenuHomePhabricator

D12448.id29976.diff
No OneTemporary

D12448.id29976.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' => 'a2a90172',
- 'core.pkg.js' => 'dfea788f',
+ 'core.pkg.js' => '8030c176',
'darkconsole.pkg.js' => '8ab24e01',
'differential.pkg.css' => '3500921f',
'differential.pkg.js' => 'c0506961',
@@ -205,7 +205,7 @@
'rsrc/externals/javelin/lib/JSON.js' => '69adf288',
'rsrc/externals/javelin/lib/Leader.js' => '331b1611',
'rsrc/externals/javelin/lib/Mask.js' => '8a41885b',
- 'rsrc/externals/javelin/lib/Quicksand.js' => 'd15f0293',
+ 'rsrc/externals/javelin/lib/Quicksand.js' => '2a42902e',
'rsrc/externals/javelin/lib/Request.js' => '94b750d2',
'rsrc/externals/javelin/lib/Resource.js' => '44959b73',
'rsrc/externals/javelin/lib/Routable.js' => 'b3e7d692',
@@ -349,9 +349,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' => '2be71d56',
+ 'rsrc/js/application/aphlict/Aphlict.js' => '30a6303c',
'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => '00def500',
- 'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => 'bdf2226d',
+ 'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => '1b2c193d',
'rsrc/js/application/aphlict/behavior-aphlict-status.js' => 'ea681761',
'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18',
'rsrc/js/application/config/behavior-reorder-fields.js' => '14a827de',
@@ -548,10 +548,10 @@
'herald-test-css' => '778b008e',
'homepage-panel-css' => 'e34bf140',
'inline-comment-summary-css' => 'eb5f8e8c',
- 'javelin-aphlict' => '2be71d56',
+ 'javelin-aphlict' => '30a6303c',
'javelin-behavior' => '61cbc29a',
'javelin-behavior-aphlict-dropdown' => '00def500',
- 'javelin-behavior-aphlict-listen' => 'bdf2226d',
+ 'javelin-behavior-aphlict-listen' => '1b2c193d',
'javelin-behavior-aphlict-status' => 'ea681761',
'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884',
'javelin-behavior-aphront-crop' => 'fa0f4fc2',
@@ -677,7 +677,7 @@
'javelin-leader' => '331b1611',
'javelin-magical-init' => '3010e992',
'javelin-mask' => '8a41885b',
- 'javelin-quicksand' => 'd15f0293',
+ 'javelin-quicksand' => '2a42902e',
'javelin-reactor' => '2b8de964',
'javelin-reactor-dom' => 'c90a04fc',
'javelin-reactor-node-calmer' => '76f4ebed',
@@ -963,6 +963,20 @@
'javelin-util',
'phabricator-keyboard-shortcut-manager',
),
+ '1b2c193d' => array(
+ 'javelin-behavior',
+ 'javelin-aphlict',
+ 'javelin-stratcom',
+ 'javelin-request',
+ 'javelin-uri',
+ 'javelin-dom',
+ 'javelin-json',
+ 'javelin-router',
+ 'javelin-util',
+ 'javelin-leader',
+ 'javelin-sound',
+ 'phabricator-notification',
+ ),
'1d298e3a' => array(
'javelin-install',
'javelin-util',
@@ -1023,6 +1037,9 @@
'javelin-install',
'javelin-util',
),
+ '2a42902e' => array(
+ 'javelin-install',
+ ),
'2b228192' => array(
'javelin-behavior',
'javelin-dom',
@@ -1034,13 +1051,6 @@
'javelin-install',
'javelin-util',
),
- '2be71d56' => array(
- 'javelin-install',
- 'javelin-util',
- 'javelin-websocket',
- 'javelin-leader',
- 'javelin-json',
- ),
'2bfa2836' => array(
'javelin-behavior',
'javelin-stratcom',
@@ -1056,6 +1066,13 @@
'javelin-install',
'javelin-event',
),
+ '30a6303c' => array(
+ 'javelin-install',
+ 'javelin-util',
+ 'javelin-websocket',
+ 'javelin-leader',
+ 'javelin-json',
+ ),
'316b8fa1' => array(
'javelin-install',
'javelin-typeahead-source',
@@ -1745,20 +1762,6 @@
'javelin-util',
'javelin-request',
),
- 'bdf2226d' => array(
- 'javelin-behavior',
- 'javelin-aphlict',
- 'javelin-stratcom',
- 'javelin-request',
- 'javelin-uri',
- 'javelin-dom',
- 'javelin-json',
- 'javelin-router',
- 'javelin-util',
- 'javelin-leader',
- 'javelin-sound',
- 'phabricator-notification',
- ),
'be807912' => array(
'javelin-behavior',
'javelin-dom',
@@ -1793,9 +1796,6 @@
'javelin-stratcom',
'phabricator-phtize',
),
- 'd15f0293' => array(
- 'javelin-install',
- ),
'd19198c8' => array(
'javelin-install',
'javelin-dom',
diff --git a/src/view/page/PhabricatorStandardPageView.php b/src/view/page/PhabricatorStandardPageView.php
--- a/src/view/page/PhabricatorStandardPageView.php
+++ b/src/view/page/PhabricatorStandardPageView.php
@@ -461,11 +461,6 @@
$client_uri->setDomain($this_host->getDomain());
}
- $subscriptions = $this->pageObjects;
- if ($user) {
- $subscriptions[] = $user->getPHID();
- }
-
if ($request->isHTTPS()) {
$client_uri->setProtocol('wss');
} else {
@@ -476,9 +471,7 @@
'aphlict-listen',
array(
'websocketURI' => (string)$client_uri,
- 'pageObjects' => array_fill_keys($this->pageObjects, true),
- 'subscriptions' => $subscriptions,
- ));
+ ) + $this->buildAphlictListenConfigData());
}
}
@@ -590,7 +583,18 @@
}
private function buildQuicksandConfig() {
- return array();
+ return $this->buildAphlictListenConfigData();
+ }
+
+ private function buildAphlictListenConfigData() {
+ $user = $this->getRequest()->getUser();
+ $subscriptions = $this->pageObjects;
+ $subscriptions[] = $user->getPHID();
+
+ return array(
+ 'pageObjects' => array_fill_keys($this->pageObjects, true),
+ 'subscriptions' => $subscriptions,
+ );
}
private function getQuicksandURIPatternBlacklist() {
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
@@ -49,6 +49,20 @@
JX.Leader.call(JX.bind(this, this._begin));
},
+ setSubscriptions: function(subscriptions) {
+ this._subscriptions = subscriptions;
+ JX.Leader.broadcast(
+ null,
+ {type: 'aphlict.subscribe', data: this._subscriptions});
+ },
+
+ clearSubscriptions: function(subscriptions) {
+ this._subscriptions = null;
+ JX.Leader.broadcast(
+ null,
+ {type: 'aphlict.unsubscribe', data: subscriptions});
+ },
+
getStatus: function() {
return this._status;
},
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
@@ -15,7 +15,8 @@
*/
JX.behavior('aphlict-listen', function(config) {
- var showing_reload = false;
+ var page_objects = config.pageObjects;
+ var reload_notification = null;
JX.Stratcom.listen('aphlict-server-message', null, function(e) {
var message = e.getData();
@@ -78,15 +79,28 @@
// 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) {
+ if ((response.primaryObjectPHID in page_objects) &&
+ reload_notification === null) {
+
var reload = new JX.Notification()
.setContent('Page updated, click to reload.')
.alterClassName('jx-notification-alert', true)
.setDuration(0);
- reload.listen('activate', function() { JX.$U().go(); });
+ reload.listen(
+ 'activate',
+ function() {
+ // double check we are still on the page where re-loading makes
+ // sense...!
+ if (response.primaryObjectPHID in page_objects) {
+ JX.$U().go();
+ }
+ });
reload.show();
- showing_reload = true;
+ reload_notification = {
+ dialog: reload,
+ phid: response.primaryObjectPHID
+ };
}
});
@@ -98,6 +112,25 @@
.setHandler(onAphlictMessage)
.start();
+ JX.Stratcom.listen(
+ 'quicksand-redraw',
+ null,
+ function (e) {
+ var old_data = e.getData().oldResponse;
+ var new_data = e.getData().newResponse;
+ client.clearSubscriptions(old_data.subscriptions);
+ client.setSubscriptions(new_data.subscriptions);
+
+ page_objects = new_data.pageObjects;
+ if (reload_notification) {
+ if (reload_notification.phid in page_objects) {
+ return;
+ }
+ reload_notification.dialog.hide();
+ reload_notification = null;
+ }
+ });
+
JX.Leader.listen('onReceiveBroadcast', function(message, is_leader) {
if (message.type !== 'sound') {
return;

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 11, 6:13 AM (20 h, 41 m ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7503975
Default Alt Text
D12448.id29976.diff (9 KB)

Event Timeline