1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-02-22 03:29:11 +01:00

Show a count (like "(3)") in the page title corresponding to unread notifications/messages

Summary: Fixes T5368. Synchronizes the page title to reflect unread counts in the notification and Conphernece messages menus.

Test Plan: {F201083}

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T5368

Differential Revision: https://secure.phabricator.com/D10457
This commit is contained in:
epriestley 2014-09-10 10:17:49 -07:00
parent bee1e09fd1
commit 568b0e06e7
4 changed files with 70 additions and 12 deletions

View file

@ -8,7 +8,7 @@
return array( return array(
'names' => array( 'names' => array(
'core.pkg.css' => '974635bb', 'core.pkg.css' => '974635bb',
'core.pkg.js' => 'f0e2c091', 'core.pkg.js' => 'cbdbd552',
'darkconsole.pkg.js' => 'df001cab', 'darkconsole.pkg.js' => 'df001cab',
'differential.pkg.css' => '36884139', 'differential.pkg.css' => '36884139',
'differential.pkg.js' => '73337d1d', 'differential.pkg.js' => '73337d1d',
@ -348,7 +348,7 @@ return array(
'rsrc/image/texture/table_header_hover.png' => '038ec3b9', 'rsrc/image/texture/table_header_hover.png' => '038ec3b9',
'rsrc/image/texture/table_header_tall.png' => 'd56b434f', 'rsrc/image/texture/table_header_tall.png' => 'd56b434f',
'rsrc/js/application/aphlict/Aphlict.js' => '4a07e8e3', 'rsrc/js/application/aphlict/Aphlict.js' => '4a07e8e3',
'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => 'f51afce0', 'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => '7d4cc76c',
'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => 'a826c925', 'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => 'a826c925',
'rsrc/js/application/aphlict/behavior-aphlict-status.js' => '58f7803f', 'rsrc/js/application/aphlict/behavior-aphlict-status.js' => '58f7803f',
'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18', 'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18',
@ -448,6 +448,7 @@ return array(
'rsrc/js/core/Prefab.js' => 'bbae734c', 'rsrc/js/core/Prefab.js' => 'bbae734c',
'rsrc/js/core/ShapedRequest.js' => '7cbe244b', 'rsrc/js/core/ShapedRequest.js' => '7cbe244b',
'rsrc/js/core/TextAreaUtils.js' => '5c93c52c', 'rsrc/js/core/TextAreaUtils.js' => '5c93c52c',
'rsrc/js/core/Title.js' => '5c1c758c',
'rsrc/js/core/ToolTip.js' => '3915d490', 'rsrc/js/core/ToolTip.js' => '3915d490',
'rsrc/js/core/behavior-active-nav.js' => 'e379b58e', 'rsrc/js/core/behavior-active-nav.js' => 'e379b58e',
'rsrc/js/core/behavior-audio-source.js' => '59b251eb', 'rsrc/js/core/behavior-audio-source.js' => '59b251eb',
@ -542,7 +543,7 @@ return array(
'inline-comment-summary-css' => '8cfd34e8', 'inline-comment-summary-css' => '8cfd34e8',
'javelin-aphlict' => '4a07e8e3', 'javelin-aphlict' => '4a07e8e3',
'javelin-behavior' => '61cbc29a', 'javelin-behavior' => '61cbc29a',
'javelin-behavior-aphlict-dropdown' => 'f51afce0', 'javelin-behavior-aphlict-dropdown' => '7d4cc76c',
'javelin-behavior-aphlict-listen' => 'a826c925', 'javelin-behavior-aphlict-listen' => 'a826c925',
'javelin-behavior-aphlict-status' => '58f7803f', 'javelin-behavior-aphlict-status' => '58f7803f',
'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884', 'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884',
@ -740,6 +741,7 @@ return array(
'phabricator-source-code-view-css' => '7d346aa4', 'phabricator-source-code-view-css' => '7d346aa4',
'phabricator-standard-page-view' => '517cdfb1', 'phabricator-standard-page-view' => '517cdfb1',
'phabricator-textareautils' => '5c93c52c', 'phabricator-textareautils' => '5c93c52c',
'phabricator-title' => '5c1c758c',
'phabricator-tooltip' => '3915d490', 'phabricator-tooltip' => '3915d490',
'phabricator-transaction-view-css' => '5d0cae25', 'phabricator-transaction-view-css' => '5d0cae25',
'phabricator-ui-example-css' => '528b19de', 'phabricator-ui-example-css' => '528b19de',
@ -1190,6 +1192,9 @@ return array(
'javelin-behavior', 'javelin-behavior',
'javelin-stratcom', 'javelin-stratcom',
), ),
'5c1c758c' => array(
'javelin-install',
),
'5c54cbf3' => array( '5c54cbf3' => array(
'javelin-behavior', 'javelin-behavior',
'javelin-stratcom', 'javelin-stratcom',
@ -1328,6 +1333,16 @@ return array(
'javelin-request', 'javelin-request',
'javelin-router', 'javelin-router',
), ),
'7d4cc76c' => array(
'javelin-behavior',
'javelin-request',
'javelin-stratcom',
'javelin-vector',
'javelin-dom',
'javelin-uri',
'javelin-behavior-device',
'phabricator-title',
),
'7e41274a' => array( '7e41274a' => array(
'javelin-install', 'javelin-install',
), ),
@ -1859,15 +1874,6 @@ return array(
'phuix-action-view', 'phuix-action-view',
'javelin-workflow', 'javelin-workflow',
), ),
'f51afce0' => array(
'javelin-behavior',
'javelin-request',
'javelin-stratcom',
'javelin-vector',
'javelin-dom',
'javelin-uri',
'javelin-behavior-device',
),
'f588412e' => array( 'f588412e' => array(
'javelin-behavior', 'javelin-behavior',
'javelin-dom', 'javelin-dom',

View file

@ -349,6 +349,8 @@ final class PhabricatorMainMenuView extends AphrontView {
'dropdownID' => $message_dropdown_id, 'dropdownID' => $message_dropdown_id,
'loadingText' => pht('Loading...'), 'loadingText' => pht('Loading...'),
'uri' => '/conpherence/panel/', 'uri' => '/conpherence/panel/',
'countType' => 'messages',
'countNumber' => $message_count_number,
)); ));
$message_notification_dropdown = javelin_tag( $message_notification_dropdown = javelin_tag(
@ -428,6 +430,8 @@ final class PhabricatorMainMenuView extends AphrontView {
'dropdownID' => $dropdown_id, 'dropdownID' => $dropdown_id,
'loadingText' => pht('Loading...'), 'loadingText' => pht('Loading...'),
'uri' => '/notification/panel/', 'uri' => '/notification/panel/',
'countType' => 'notifications',
'countNumber' => $count_number,
)); ));
$notification_dropdown = javelin_tag( $notification_dropdown = javelin_tag(

View file

@ -7,6 +7,7 @@
* javelin-dom * javelin-dom
* javelin-uri * javelin-uri
* javelin-behavior-device * javelin-behavior-device
* phabricator-title
*/ */
JX.behavior('aphlict-dropdown', function(config, statics) { JX.behavior('aphlict-dropdown', function(config, statics) {
@ -24,6 +25,8 @@ JX.behavior('aphlict-dropdown', function(config, statics) {
var request = null; var request = null;
var dirty = config.local ? false : true; var dirty = config.local ? false : true;
JX.Title.setCount(config.countType, config.countNumber);
function refresh() { function refresh() {
if (dirty) { if (dirty) {
JX.DOM.setContent(dropdown, config.loadingText); JX.DOM.setContent(dropdown, config.loadingText);
@ -38,6 +41,8 @@ JX.behavior('aphlict-dropdown', function(config, statics) {
} }
request = new JX.Request(config.uri, function(response) { request = new JX.Request(config.uri, function(response) {
JX.Title.setCount(config.countType, response.number);
var display = (response.number > 999) ? '\u221E' : response.number; var display = (response.number > 999) ? '\u221E' : response.number;
JX.DOM.setContent(count, display); JX.DOM.setContent(count, display);

View file

@ -0,0 +1,43 @@
/**
* @requires javelin-install
* @provides phabricator-title
* @javelin
*/
/**
* Update the document title to show a notification/message count.
*/
JX.install('Title', {
statics: {
_counts: {},
_title: null,
setCount: function(k, v) {
var self = JX.Title;
self._counts[k] = v;
self._update();
},
_update: function() {
var self = JX.Title;
if (self._title === null) {
self._title = document.title;
}
var sum = 0;
for (var k in self._counts) {
sum += parseInt(self._counts[k], 10) || 0;
}
var title;
if (sum) {
title = '(' + sum + ') ' + self._title;
} else {
title = self._title;
}
document.title = title;
}
}
});