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' => '70320e8a', - 'core.pkg.js' => '5a1c336d', + 'core.pkg.js' => '28ef0e70', 'darkconsole.pkg.js' => '8ab24e01', 'differential.pkg.css' => '1940be3f', 'differential.pkg.js' => '53c1ccc2', @@ -207,7 +207,8 @@ 'rsrc/externals/javelin/lib/Resource.js' => '44959b73', 'rsrc/externals/javelin/lib/Routable.js' => 'b3e7d692', 'rsrc/externals/javelin/lib/Router.js' => '29274e2b', - 'rsrc/externals/javelin/lib/Scrollbar.js' => '1feea462', + 'rsrc/externals/javelin/lib/Scrollbar.js' => '1ed54a27', + 'rsrc/externals/javelin/lib/Sound.js' => '59655c83', 'rsrc/externals/javelin/lib/URI.js' => '6eff08aa', 'rsrc/externals/javelin/lib/Vector.js' => '2caa8fb8', 'rsrc/externals/javelin/lib/WebSocket.js' => 'e292eaf4', @@ -347,15 +348,14 @@ 'rsrc/image/texture/table_header_tall.png' => 'd56b434f', 'rsrc/js/application/aphlict/Aphlict.js' => '2be71d56', 'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => '830b3278', - 'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => '851f167c', + 'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => 'bdf2226d', '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', - 'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => '11e2dcf2', - 'rsrc/js/application/conpherence/behavior-durable-column.js' => '5fc7fac0', - 'rsrc/js/application/conpherence/behavior-menu.js' => '6bc52765', - 'rsrc/js/application/conpherence/behavior-pontificate.js' => '21ba5861', - 'rsrc/js/application/conpherence/behavior-widget-pane.js' => '2c1cd7f5', + 'rsrc/js/application/conpherence/behavior-durable-column.js' => 'e4affa94', + 'rsrc/js/application/conpherence/behavior-menu.js' => '869e3445', + 'rsrc/js/application/conpherence/behavior-pontificate.js' => '86df5915', + 'rsrc/js/application/conpherence/behavior-widget-pane.js' => '40b1ff90', 'rsrc/js/application/countdown/timer.js' => 'e4cc26b3', 'rsrc/js/application/dashboard/behavior-dashboard-async-panel.js' => '469c0d9e', 'rsrc/js/application/dashboard/behavior-dashboard-move-panels.js' => '82439934', @@ -517,7 +517,6 @@ 'conpherence-menu-css' => 'c6ac5299', 'conpherence-message-pane-css' => '5930260a', 'conpherence-notification-css' => '04a6e10a', - 'conpherence-thread-manager' => '11e2dcf2', 'conpherence-update-css' => '1099a660', 'conpherence-widget-pane-css' => '3d575438', 'differential-changeset-view-css' => '6a8b172a', @@ -544,7 +543,7 @@ 'javelin-aphlict' => '2be71d56', 'javelin-behavior' => '61cbc29a', 'javelin-behavior-aphlict-dropdown' => '830b3278', - 'javelin-behavior-aphlict-listen' => '851f167c', + 'javelin-behavior-aphlict-listen' => 'bdf2226d', 'javelin-behavior-aphlict-status' => 'ea681761', 'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884', 'javelin-behavior-aphront-crop' => 'fa0f4fc2', @@ -557,9 +556,9 @@ 'javelin-behavior-boards-dropdown' => '0ec56e1d', 'javelin-behavior-choose-control' => '6153c708', 'javelin-behavior-config-reorder-fields' => '14a827de', - 'javelin-behavior-conpherence-menu' => '6bc52765', - 'javelin-behavior-conpherence-pontificate' => '21ba5861', - 'javelin-behavior-conpherence-widget-pane' => '2c1cd7f5', + 'javelin-behavior-conpherence-menu' => '869e3445', + 'javelin-behavior-conpherence-pontificate' => '86df5915', + 'javelin-behavior-conpherence-widget-pane' => '40b1ff90', 'javelin-behavior-countdown-timer' => 'e4cc26b3', 'javelin-behavior-dark-console' => '08883e8b', 'javelin-behavior-dashboard-async-panel' => '469c0d9e', @@ -584,7 +583,7 @@ 'javelin-behavior-diffusion-locate-file' => '6d3e1947', 'javelin-behavior-diffusion-pull-lastmodified' => '2b228192', 'javelin-behavior-doorkeeper-tag' => 'e5822781', - 'javelin-behavior-durable-column' => '5fc7fac0', + 'javelin-behavior-durable-column' => 'e4affa94', 'javelin-behavior-error-log' => '6882e80a', 'javelin-behavior-fancy-datepicker' => 'c51ae228', 'javelin-behavior-global-drag-and-drop' => '07f199d8', @@ -678,7 +677,8 @@ 'javelin-resource' => '44959b73', 'javelin-routable' => 'b3e7d692', 'javelin-router' => '29274e2b', - 'javelin-scrollbar' => '1feea462', + 'javelin-scrollbar' => '1ed54a27', + 'javelin-sound' => '59655c83', 'javelin-stratcom' => '6c53634d', 'javelin-tokenizer' => '7644823e', 'javelin-typeahead' => '70baed2f', @@ -899,16 +899,6 @@ 'javelin-install', 'javelin-util', ), - '11e2dcf2' => array( - 'javelin-dom', - 'javelin-util', - 'javelin-stratcom', - 'javelin-install', - 'javelin-workflow', - 'javelin-router', - 'javelin-behavior-device', - 'javelin-vector', - ), '13c739ea' => array( 'javelin-behavior', 'javelin-stratcom', @@ -962,7 +952,7 @@ 'javelin-dom', 'javelin-reactor-dom', ), - '1feea462' => array( + '1ed54a27' => array( 'javelin-install', 'javelin-dom', 'javelin-stratcom', @@ -980,14 +970,6 @@ 'phabricator-phtize', 'changeset-view-manager', ), - '21ba5861' => array( - 'javelin-behavior', - 'javelin-dom', - 'javelin-util', - 'javelin-workflow', - 'javelin-stratcom', - 'conpherence-thread-manager', - ), '2290aeef' => array( 'javelin-install', 'javelin-dom', @@ -1032,19 +1014,6 @@ 'javelin-stratcom', 'javelin-dom', ), - '2c1cd7f5' => array( - 'javelin-behavior', - 'javelin-dom', - 'javelin-stratcom', - 'javelin-workflow', - 'javelin-util', - 'phabricator-notification', - 'javelin-behavior-device', - 'phuix-dropdown-menu', - 'phuix-action-list-view', - 'phuix-action-view', - 'conpherence-thread-manager', - ), '2c426492' => array( 'javelin-behavior', 'javelin-dom', @@ -1100,6 +1069,18 @@ 'javelin-dom', 'javelin-reactor-dom', ), + '40b1ff90' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-util', + 'phabricator-notification', + 'javelin-behavior-device', + 'phuix-dropdown-menu', + 'phuix-action-list-view', + 'phuix-action-view', + ), 42126667 => array( 'javelin-behavior', 'javelin-dom', @@ -1196,6 +1177,9 @@ 'javelin-vector', 'javelin-dom', ), + '59655c83' => array( + 'javelin-install', + ), '59b251eb' => array( 'javelin-behavior', 'javelin-stratcom', @@ -1219,15 +1203,6 @@ 'javelin-dom', 'javelin-vector', ), - '5fc7fac0' => array( - 'javelin-behavior', - 'javelin-dom', - 'javelin-stratcom', - 'javelin-scrollbar', - 'javelin-quicksand', - 'phabricator-keyboard-shortcut', - 'conpherence-thread-manager', - ), '5fefb143' => array( 'javelin-behavior', 'javelin-dom', @@ -1268,18 +1243,6 @@ '69adf288' => array( 'javelin-install', ), - '6bc52765' => array( - 'javelin-behavior', - 'javelin-dom', - 'javelin-util', - 'javelin-stratcom', - 'javelin-workflow', - 'javelin-behavior-device', - 'javelin-history', - 'javelin-vector', - 'phabricator-shaped-request', - 'conpherence-thread-manager', - ), '6c2b09a2' => array( 'javelin-install', 'javelin-util', @@ -1466,19 +1429,6 @@ 'javelin-uri', 'javelin-routable', ), - '851f167c' => array( - 'javelin-behavior', - 'javelin-aphlict', - 'javelin-stratcom', - 'javelin-request', - 'javelin-uri', - 'javelin-dom', - 'javelin-json', - 'javelin-router', - 'javelin-util', - 'javelin-leader', - 'phabricator-notification', - ), '85ea0626' => array( 'javelin-install', ), @@ -1489,6 +1439,24 @@ 'phabricator-tooltip', 'changeset-view-manager', ), + '869e3445' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-behavior-device', + 'javelin-history', + 'javelin-vector', + 'phabricator-shaped-request', + ), + '86df5915' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'javelin-workflow', + 'javelin-stratcom', + ), '87cb6b51' => array( 'javelin-behavior', 'javelin-dom', @@ -1744,6 +1712,20 @@ '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', @@ -1860,6 +1842,14 @@ 'javelin-dom', 'javelin-uri', ), + 'e4affa94' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-scrollbar', + 'javelin-quicksand', + 'phabricator-keyboard-shortcut', + ), 'e4cc26b3' => array( 'javelin-behavior', 'javelin-dom', diff --git a/src/applications/celerity/controller/CelerityResourceController.php b/src/applications/celerity/controller/CelerityResourceController.php --- a/src/applications/celerity/controller/CelerityResourceController.php +++ b/src/applications/celerity/controller/CelerityResourceController.php @@ -125,6 +125,7 @@ 'woff2' => 'font/woff2', 'eot' => 'font/eot', 'ttf' => 'font/ttf', + 'mp3' => 'audio/mpeg', ); } diff --git a/src/applications/celerity/resources/CelerityResourcesOnDisk.php b/src/applications/celerity/resources/CelerityResourcesOnDisk.php --- a/src/applications/celerity/resources/CelerityResourcesOnDisk.php +++ b/src/applications/celerity/resources/CelerityResourcesOnDisk.php @@ -37,6 +37,7 @@ 'woff2', 'ttf', 'eot', + 'mp3', ); } diff --git a/webroot/rsrc/externals/javelin/lib/Sound.js b/webroot/rsrc/externals/javelin/lib/Sound.js new file mode 100644 --- /dev/null +++ b/webroot/rsrc/externals/javelin/lib/Sound.js @@ -0,0 +1,38 @@ +/** + * @requires javelin-install + * @provides javelin-sound + * @javelin + */ + + +JX.install('Sound', { + statics: { + _sounds: {}, + + load: function(uri) { + var self = JX.Sound; + + if (!(uri in self._sounds)) { + self._sounds[uri] = JX.$N( + 'audio', + { + src: uri, + preload: 'auto' + }); + } + }, + + play: function(uri) { + var self = JX.Sound; + self.load(uri); + + var sound = self._sounds[uri]; + + try { + sound.play(); + } catch (ex) { + JX.log(ex); + } + } + } +}); 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 @@ -10,6 +10,7 @@ * javelin-router * javelin-util * javelin-leader + * javelin-sound * phabricator-notification */ @@ -97,4 +98,17 @@ .setHandler(onAphlictMessage) .start(); + JX.Leader.listen('onReceiveBroadcast', function(message, is_leader) { + if (message.type !== 'sound') { + return; + } + + if (!is_leader) { + return; + } + + JX.Sound.play(message.data); + }); + + });