From 145b0fb1dc97ddc5ae6986c276ca8108f749fd9a Mon Sep 17 00:00:00 2001 From: Toby Zerner Date: Tue, 4 Aug 2015 19:04:17 +0930 Subject: [PATCH] Add an API to show a count in the document title --- .../js/forum/src/components/DiscussionPage.js | 1 + .../core/js/forum/src/components/IndexPage.js | 1 + framework/core/js/lib/App.js | 24 ++++++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/framework/core/js/forum/src/components/DiscussionPage.js b/framework/core/js/forum/src/components/DiscussionPage.js index 2f4d903e5..79d3169e9 100644 --- a/framework/core/js/forum/src/components/DiscussionPage.js +++ b/framework/core/js/forum/src/components/DiscussionPage.js @@ -184,6 +184,7 @@ export default class DiscussionPage extends mixin(Component, evented) { this.discussion = discussion; app.setTitle(discussion.title()); + app.setTitleCount(0); // When the API responds with a discussion, it will also include a number of // posts. Some of these posts are included because they are on the first diff --git a/framework/core/js/forum/src/components/IndexPage.js b/framework/core/js/forum/src/components/IndexPage.js index baddf654d..677c3f494 100644 --- a/framework/core/js/forum/src/components/IndexPage.js +++ b/framework/core/js/forum/src/components/IndexPage.js @@ -96,6 +96,7 @@ export default class IndexPage extends Component { }; app.setTitle(''); + app.setTitleCount(0); // Work out the difference between the height of this hero and that of the // previous hero. Maintain the same scroll position relative to the bottom diff --git a/framework/core/js/lib/App.js b/framework/core/js/lib/App.js index 0ae388437..c8327efdd 100644 --- a/framework/core/js/lib/App.js +++ b/framework/core/js/lib/App.js @@ -107,6 +107,9 @@ export default class App { * @private */ this.requestError = null; + + this.title = ''; + this.titleCount = 0; } /** @@ -139,10 +142,29 @@ export default class App { * Set the of the page. * * @param {String} title + * @param {Boolean} [separator] Whether or not to separate the given title and + * the forum's title. * @public */ setTitle(title) { - document.title = (title ? title + ' - ' : '') + this.forum.attribute('title'); + this.title = title; + this.updateTitle(); + } + + /** + * Set a number to display in the <title> of the page. + * + * @param {Integer} count + */ + setTitleCount(count) { + this.titleCount = count; + this.updateTitle(); + } + + updateTitle() { + document.title = (this.titleCount ? `(${this.titleCount}) ` : '') + + (this.title ? this.title + ' - ' : '') + + this.forum.attribute('title'); } /**