summaryrefslogtreecommitdiff
path: root/client/js/controllers/page_controller.js
diff options
context:
space:
mode:
authorrr- <rr-@sakuya.pl>2016-06-14 10:31:48 +0200
committerrr- <rr-@sakuya.pl>2016-06-18 10:35:20 +0200
commit54e3099c5696e0b4fc7b05fb5ecc41ab4726628b (patch)
tree29127e1c3d3d3d9bebfccefdf148da7305e2d5b3 /client/js/controllers/page_controller.js
parentc74f06da35af3c35d565a3c96e3d048f7a1ec011 (diff)
client/general: refactor control flow
- Controller lifetime is bound to route lifetime - View lifetime is bound to controller lifetime - Control lifetime is bound to view lifetime - Enhanced event dispatching - Enhanced responsiveness in some places - Views communicate user input to controllers via new event system
Diffstat (limited to 'client/js/controllers/page_controller.js')
-rw-r--r--client/js/controllers/page_controller.js50
1 files changed, 19 insertions, 31 deletions
diff --git a/client/js/controllers/page_controller.js b/client/js/controllers/page_controller.js
index 2047484..5228674 100644
--- a/client/js/controllers/page_controller.js
+++ b/client/js/controllers/page_controller.js
@@ -1,43 +1,35 @@
'use strict';
-const events = require('../events.js');
-const settings = require('../settings.js');
+const settings = require('../models/settings.js');
const EndlessPageView = require('../views/endless_page_view.js');
const ManualPageView = require('../views/manual_page_view.js');
class PageController {
- constructor() {
- events.listen(events.SettingsChange, () => {
- this._update();
- return true;
- });
- this._update();
- }
+ constructor(ctx) {
+ const extendedContext = {
+ clientUrl: ctx.clientUrl,
+ searchQuery: ctx.searchQuery,
+ };
+
+ ctx.headerContext = Object.assign({}, extendedContext);
+ ctx.pageContext = Object.assign({}, extendedContext);
- _update() {
- if (settings.getSettings().endlessScroll) {
- this._pageView = new EndlessPageView();
+ if (settings.get().endlessScroll) {
+ this._view = new EndlessPageView(ctx);
} else {
- this._pageView = new ManualPageView();
+ this._view = new ManualPageView(ctx);
}
}
- run(ctx) {
- this._pageView.unrender();
-
- const extendedContext = {
- clientUrl: ctx.clientUrl,
- searchQuery: ctx.searchQuery,
- };
+ showSuccess(message) {
+ this._view.showSuccess(message);
+ }
- ctx.headerContext = ctx.headerContext || {};
- ctx.pageContext = ctx.pageContext || {};
- Object.assign(ctx.headerContext, extendedContext);
- Object.assign(ctx.pageContext, extendedContext);
- this._pageView.render(ctx);
+ showError(message) {
+ this._view.showError(message);
}
- createHistoryCacheProxy(routerCtx, requestPage) {
+ static createHistoryCacheProxy(routerCtx, requestPage) {
return page => {
if (routerCtx.state.response) {
return new Promise((resolve, reject) => {
@@ -52,10 +44,6 @@ class PageController {
return promise;
};
}
-
- stop() {
- this._pageView.unrender();
- }
}
-module.exports = new PageController();
+module.exports = PageController;