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 @@
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);