diff --git a/client/html/home.tpl b/client/html/home.tpl index c133a59f..b14b0c90 100644 --- a/client/html/home.tpl +++ b/client/html/home.tpl @@ -1,5 +1,8 @@
-

<%= ctx.name %>

+
+

<%= ctx.name %>

+

Serving <%= ctx.postCount %> posts (<%= ctx.makeFileSize(ctx.diskUsage) %>)

+
diff --git a/client/js/controllers/home_controller.js b/client/js/controllers/home_controller.js index 234c04a1..25800d0d 100644 --- a/client/js/controllers/home_controller.js +++ b/client/js/controllers/home_controller.js @@ -1,6 +1,8 @@ 'use strict'; const page = require('page'); +const api = require('../api.js'); +const events = require('../events.js'); const topNavController = require('../controllers/top_nav_controller.js'); const HomeView = require('../views/home_view.js'); const NotFoundView = require('../views/not_found_view.js'); @@ -18,7 +20,19 @@ class HomeController { _indexRoute() { topNavController.activate('home'); - this._homeView.render({}); + + api.get('/info') + .then(response => { + this._homeView.render({ + diskUsage: response.diskUsage, + postCount: response.postCount, + featuredPost: response.featuredPost, + }); + }, + response => { + this._homeView.render({}); + events.notify(events.Error, response.description); + }); } _notFoundRoute(ctx) { diff --git a/client/js/util/misc.js b/client/js/util/misc.js index 423fe393..d4454121 100644 --- a/client/js/util/misc.js +++ b/client/js/util/misc.js @@ -11,6 +11,35 @@ function* range(start=0, end=null, step=1) { } } +function _formatUnits(number, base, suffixes, callback) { + if (!number && number !== 0) { + return NaN; + } + number *= 1.0; + let suffix = suffixes.shift(); + while (number >= base && suffixes.length > 0) { + suffix = suffixes.shift(); + number /= base; + } + if (callback === undefined) { + callback = (number, suffix) => { + return suffix ? number.toFixed(1) + suffix : number; + }; + } + return callback(number, suffix); +} + +function formatFileSize(fileSize) { + return _formatUnits( + fileSize, + 1024, + ['B', 'K', 'M', 'G'], + (number, suffix) => { + const decimalPlaces = number < 20 && suffix !== 'B' ? 1 : 0; + return number.toFixed(decimalPlaces) + suffix; + }); +} + function formatRelativeTime(timeString) { if (!timeString) { return 'never'; @@ -108,5 +137,6 @@ module.exports = { parseSearchQuery: parseSearchQuery, parseSearchQueryRoute: parseSearchQueryRoute, formatRelativeTime: formatRelativeTime, + formatFileSize: formatFileSize, unindent: unindent, }; diff --git a/client/js/util/views.js b/client/js/util/views.js index 844cb48a..b47c9c66 100644 --- a/client/js/util/views.js +++ b/client/js/util/views.js @@ -24,6 +24,10 @@ function _makeLabel(options, attrs) { return makeNonVoidElement('label', attrs, options.text); } +function makeFileSize(fileSize) { + return misc.formatFileSize(fileSize); +} + function makeRelativeTime(time) { return makeNonVoidElement( 'time', @@ -244,6 +248,7 @@ function getTemplate(templatePath) { } Object.assign(ctx, { makeRelativeTime: makeRelativeTime, + makeFileSize: makeFileSize, makeThumbnail: makeThumbnail, makeRadio: makeRadio, makeCheckbox: makeCheckbox, diff --git a/client/js/views/home_view.js b/client/js/views/home_view.js index cb19b195..9f7c3b69 100644 --- a/client/js/views/home_view.js +++ b/client/js/views/home_view.js @@ -14,6 +14,8 @@ class HomeView { name: config.name, version: config.meta.version, buildDate: config.meta.buildDate, + diskUsage: ctx.diskUsage, + postCount: ctx.postCount, }); views.listenToMessages(source);