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

View file

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

View file

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