@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add support for playing sounds

Summary:
Ref T5369. New HTML5 version without flash dependencies.

This doesn't play any sounds.

Test Plan: Did not play any sounds.

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: joshuaspence, epriestley

Maniphest Tasks: T5369

Differential Revision: https://secure.phabricator.com/D9535

+125 -81
+71 -81
resources/celerity/map.php
··· 8 8 return array( 9 9 'names' => array( 10 10 'core.pkg.css' => '70320e8a', 11 - 'core.pkg.js' => '5a1c336d', 11 + 'core.pkg.js' => '28ef0e70', 12 12 'darkconsole.pkg.js' => '8ab24e01', 13 13 'differential.pkg.css' => '1940be3f', 14 14 'differential.pkg.js' => '53c1ccc2', ··· 207 207 'rsrc/externals/javelin/lib/Resource.js' => '44959b73', 208 208 'rsrc/externals/javelin/lib/Routable.js' => 'b3e7d692', 209 209 'rsrc/externals/javelin/lib/Router.js' => '29274e2b', 210 - 'rsrc/externals/javelin/lib/Scrollbar.js' => '1feea462', 210 + 'rsrc/externals/javelin/lib/Scrollbar.js' => '1ed54a27', 211 + 'rsrc/externals/javelin/lib/Sound.js' => '59655c83', 211 212 'rsrc/externals/javelin/lib/URI.js' => '6eff08aa', 212 213 'rsrc/externals/javelin/lib/Vector.js' => '2caa8fb8', 213 214 'rsrc/externals/javelin/lib/WebSocket.js' => 'e292eaf4', ··· 347 348 'rsrc/image/texture/table_header_tall.png' => 'd56b434f', 348 349 'rsrc/js/application/aphlict/Aphlict.js' => '2be71d56', 349 350 'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => '830b3278', 350 - 'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => '851f167c', 351 + 'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => 'bdf2226d', 351 352 'rsrc/js/application/aphlict/behavior-aphlict-status.js' => 'ea681761', 352 353 'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18', 353 354 'rsrc/js/application/config/behavior-reorder-fields.js' => '14a827de', 354 - 'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => '11e2dcf2', 355 - 'rsrc/js/application/conpherence/behavior-durable-column.js' => '5fc7fac0', 356 - 'rsrc/js/application/conpherence/behavior-menu.js' => '6bc52765', 357 - 'rsrc/js/application/conpherence/behavior-pontificate.js' => '21ba5861', 358 - 'rsrc/js/application/conpherence/behavior-widget-pane.js' => '2c1cd7f5', 355 + 'rsrc/js/application/conpherence/behavior-durable-column.js' => 'e4affa94', 356 + 'rsrc/js/application/conpherence/behavior-menu.js' => '869e3445', 357 + 'rsrc/js/application/conpherence/behavior-pontificate.js' => '86df5915', 358 + 'rsrc/js/application/conpherence/behavior-widget-pane.js' => '40b1ff90', 359 359 'rsrc/js/application/countdown/timer.js' => 'e4cc26b3', 360 360 'rsrc/js/application/dashboard/behavior-dashboard-async-panel.js' => '469c0d9e', 361 361 'rsrc/js/application/dashboard/behavior-dashboard-move-panels.js' => '82439934', ··· 517 517 'conpherence-menu-css' => 'c6ac5299', 518 518 'conpherence-message-pane-css' => '5930260a', 519 519 'conpherence-notification-css' => '04a6e10a', 520 - 'conpherence-thread-manager' => '11e2dcf2', 521 520 'conpherence-update-css' => '1099a660', 522 521 'conpherence-widget-pane-css' => '3d575438', 523 522 'differential-changeset-view-css' => '6a8b172a', ··· 544 543 'javelin-aphlict' => '2be71d56', 545 544 'javelin-behavior' => '61cbc29a', 546 545 'javelin-behavior-aphlict-dropdown' => '830b3278', 547 - 'javelin-behavior-aphlict-listen' => '851f167c', 546 + 'javelin-behavior-aphlict-listen' => 'bdf2226d', 548 547 'javelin-behavior-aphlict-status' => 'ea681761', 549 548 'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884', 550 549 'javelin-behavior-aphront-crop' => 'fa0f4fc2', ··· 557 556 'javelin-behavior-boards-dropdown' => '0ec56e1d', 558 557 'javelin-behavior-choose-control' => '6153c708', 559 558 'javelin-behavior-config-reorder-fields' => '14a827de', 560 - 'javelin-behavior-conpherence-menu' => '6bc52765', 561 - 'javelin-behavior-conpherence-pontificate' => '21ba5861', 562 - 'javelin-behavior-conpherence-widget-pane' => '2c1cd7f5', 559 + 'javelin-behavior-conpherence-menu' => '869e3445', 560 + 'javelin-behavior-conpherence-pontificate' => '86df5915', 561 + 'javelin-behavior-conpherence-widget-pane' => '40b1ff90', 563 562 'javelin-behavior-countdown-timer' => 'e4cc26b3', 564 563 'javelin-behavior-dark-console' => '08883e8b', 565 564 'javelin-behavior-dashboard-async-panel' => '469c0d9e', ··· 584 583 'javelin-behavior-diffusion-locate-file' => '6d3e1947', 585 584 'javelin-behavior-diffusion-pull-lastmodified' => '2b228192', 586 585 'javelin-behavior-doorkeeper-tag' => 'e5822781', 587 - 'javelin-behavior-durable-column' => '5fc7fac0', 586 + 'javelin-behavior-durable-column' => 'e4affa94', 588 587 'javelin-behavior-error-log' => '6882e80a', 589 588 'javelin-behavior-fancy-datepicker' => 'c51ae228', 590 589 'javelin-behavior-global-drag-and-drop' => '07f199d8', ··· 678 677 'javelin-resource' => '44959b73', 679 678 'javelin-routable' => 'b3e7d692', 680 679 'javelin-router' => '29274e2b', 681 - 'javelin-scrollbar' => '1feea462', 680 + 'javelin-scrollbar' => '1ed54a27', 681 + 'javelin-sound' => '59655c83', 682 682 'javelin-stratcom' => '6c53634d', 683 683 'javelin-tokenizer' => '7644823e', 684 684 'javelin-typeahead' => '70baed2f', ··· 899 899 'javelin-install', 900 900 'javelin-util', 901 901 ), 902 - '11e2dcf2' => array( 903 - 'javelin-dom', 904 - 'javelin-util', 905 - 'javelin-stratcom', 906 - 'javelin-install', 907 - 'javelin-workflow', 908 - 'javelin-router', 909 - 'javelin-behavior-device', 910 - 'javelin-vector', 911 - ), 912 902 '13c739ea' => array( 913 903 'javelin-behavior', 914 904 'javelin-stratcom', ··· 962 952 'javelin-dom', 963 953 'javelin-reactor-dom', 964 954 ), 965 - '1feea462' => array( 955 + '1ed54a27' => array( 966 956 'javelin-install', 967 957 'javelin-dom', 968 958 'javelin-stratcom', ··· 980 970 'phabricator-phtize', 981 971 'changeset-view-manager', 982 972 ), 983 - '21ba5861' => array( 984 - 'javelin-behavior', 985 - 'javelin-dom', 986 - 'javelin-util', 987 - 'javelin-workflow', 988 - 'javelin-stratcom', 989 - 'conpherence-thread-manager', 990 - ), 991 973 '2290aeef' => array( 992 974 'javelin-install', 993 975 'javelin-dom', ··· 1032 1014 'javelin-stratcom', 1033 1015 'javelin-dom', 1034 1016 ), 1035 - '2c1cd7f5' => array( 1036 - 'javelin-behavior', 1037 - 'javelin-dom', 1038 - 'javelin-stratcom', 1039 - 'javelin-workflow', 1040 - 'javelin-util', 1041 - 'phabricator-notification', 1042 - 'javelin-behavior-device', 1043 - 'phuix-dropdown-menu', 1044 - 'phuix-action-list-view', 1045 - 'phuix-action-view', 1046 - 'conpherence-thread-manager', 1047 - ), 1048 1017 '2c426492' => array( 1049 1018 'javelin-behavior', 1050 1019 'javelin-dom', ··· 1099 1068 'javelin-install', 1100 1069 'javelin-dom', 1101 1070 'javelin-reactor-dom', 1071 + ), 1072 + '40b1ff90' => array( 1073 + 'javelin-behavior', 1074 + 'javelin-dom', 1075 + 'javelin-stratcom', 1076 + 'javelin-workflow', 1077 + 'javelin-util', 1078 + 'phabricator-notification', 1079 + 'javelin-behavior-device', 1080 + 'phuix-dropdown-menu', 1081 + 'phuix-action-list-view', 1082 + 'phuix-action-view', 1102 1083 ), 1103 1084 42126667 => array( 1104 1085 'javelin-behavior', ··· 1196 1177 'javelin-vector', 1197 1178 'javelin-dom', 1198 1179 ), 1180 + '59655c83' => array( 1181 + 'javelin-install', 1182 + ), 1199 1183 '59b251eb' => array( 1200 1184 'javelin-behavior', 1201 1185 'javelin-stratcom', ··· 1218 1202 'javelin-install', 1219 1203 'javelin-dom', 1220 1204 'javelin-vector', 1221 - ), 1222 - '5fc7fac0' => array( 1223 - 'javelin-behavior', 1224 - 'javelin-dom', 1225 - 'javelin-stratcom', 1226 - 'javelin-scrollbar', 1227 - 'javelin-quicksand', 1228 - 'phabricator-keyboard-shortcut', 1229 - 'conpherence-thread-manager', 1230 1205 ), 1231 1206 '5fefb143' => array( 1232 1207 'javelin-behavior', ··· 1267 1242 ), 1268 1243 '69adf288' => array( 1269 1244 'javelin-install', 1270 - ), 1271 - '6bc52765' => array( 1272 - 'javelin-behavior', 1273 - 'javelin-dom', 1274 - 'javelin-util', 1275 - 'javelin-stratcom', 1276 - 'javelin-workflow', 1277 - 'javelin-behavior-device', 1278 - 'javelin-history', 1279 - 'javelin-vector', 1280 - 'phabricator-shaped-request', 1281 - 'conpherence-thread-manager', 1282 1245 ), 1283 1246 '6c2b09a2' => array( 1284 1247 'javelin-install', ··· 1466 1429 'javelin-uri', 1467 1430 'javelin-routable', 1468 1431 ), 1469 - '851f167c' => array( 1470 - 'javelin-behavior', 1471 - 'javelin-aphlict', 1472 - 'javelin-stratcom', 1473 - 'javelin-request', 1474 - 'javelin-uri', 1475 - 'javelin-dom', 1476 - 'javelin-json', 1477 - 'javelin-router', 1478 - 'javelin-util', 1479 - 'javelin-leader', 1480 - 'phabricator-notification', 1481 - ), 1482 1432 '85ea0626' => array( 1483 1433 'javelin-install', 1484 1434 ), ··· 1489 1439 'phabricator-tooltip', 1490 1440 'changeset-view-manager', 1491 1441 ), 1442 + '869e3445' => array( 1443 + 'javelin-behavior', 1444 + 'javelin-dom', 1445 + 'javelin-util', 1446 + 'javelin-stratcom', 1447 + 'javelin-workflow', 1448 + 'javelin-behavior-device', 1449 + 'javelin-history', 1450 + 'javelin-vector', 1451 + 'phabricator-shaped-request', 1452 + ), 1453 + '86df5915' => array( 1454 + 'javelin-behavior', 1455 + 'javelin-dom', 1456 + 'javelin-util', 1457 + 'javelin-workflow', 1458 + 'javelin-stratcom', 1459 + ), 1492 1460 '87cb6b51' => array( 1493 1461 'javelin-behavior', 1494 1462 'javelin-dom', ··· 1744 1712 'javelin-util', 1745 1713 'javelin-request', 1746 1714 ), 1715 + 'bdf2226d' => array( 1716 + 'javelin-behavior', 1717 + 'javelin-aphlict', 1718 + 'javelin-stratcom', 1719 + 'javelin-request', 1720 + 'javelin-uri', 1721 + 'javelin-dom', 1722 + 'javelin-json', 1723 + 'javelin-router', 1724 + 'javelin-util', 1725 + 'javelin-leader', 1726 + 'javelin-sound', 1727 + 'phabricator-notification', 1728 + ), 1747 1729 'be807912' => array( 1748 1730 'javelin-behavior', 1749 1731 'javelin-dom', ··· 1859 1841 'javelin-vector', 1860 1842 'javelin-dom', 1861 1843 'javelin-uri', 1844 + ), 1845 + 'e4affa94' => array( 1846 + 'javelin-behavior', 1847 + 'javelin-dom', 1848 + 'javelin-stratcom', 1849 + 'javelin-scrollbar', 1850 + 'javelin-quicksand', 1851 + 'phabricator-keyboard-shortcut', 1862 1852 ), 1863 1853 'e4cc26b3' => array( 1864 1854 'javelin-behavior',
+1
src/applications/celerity/controller/CelerityResourceController.php
··· 125 125 'woff2' => 'font/woff2', 126 126 'eot' => 'font/eot', 127 127 'ttf' => 'font/ttf', 128 + 'mp3' => 'audio/mpeg', 128 129 ); 129 130 } 130 131
+1
src/applications/celerity/resources/CelerityResourcesOnDisk.php
··· 37 37 'woff2', 38 38 'ttf', 39 39 'eot', 40 + 'mp3', 40 41 ); 41 42 } 42 43
+38
webroot/rsrc/externals/javelin/lib/Sound.js
··· 1 + /** 2 + * @requires javelin-install 3 + * @provides javelin-sound 4 + * @javelin 5 + */ 6 + 7 + 8 + JX.install('Sound', { 9 + statics: { 10 + _sounds: {}, 11 + 12 + load: function(uri) { 13 + var self = JX.Sound; 14 + 15 + if (!(uri in self._sounds)) { 16 + self._sounds[uri] = JX.$N( 17 + 'audio', 18 + { 19 + src: uri, 20 + preload: 'auto' 21 + }); 22 + } 23 + }, 24 + 25 + play: function(uri) { 26 + var self = JX.Sound; 27 + self.load(uri); 28 + 29 + var sound = self._sounds[uri]; 30 + 31 + try { 32 + sound.play(); 33 + } catch (ex) { 34 + JX.log(ex); 35 + } 36 + } 37 + } 38 + });
+14
webroot/rsrc/js/application/aphlict/behavior-aphlict-listen.js
··· 10 10 * javelin-router 11 11 * javelin-util 12 12 * javelin-leader 13 + * javelin-sound 13 14 * phabricator-notification 14 15 */ 15 16 ··· 96 97 client 97 98 .setHandler(onAphlictMessage) 98 99 .start(); 100 + 101 + JX.Leader.listen('onReceiveBroadcast', function(message, is_leader) { 102 + if (message.type !== 'sound') { 103 + return; 104 + } 105 + 106 + if (!is_leader) { 107 + return; 108 + } 109 + 110 + JX.Sound.play(message.data); 111 + }); 112 + 99 113 100 114 });