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
This commit is contained in:
rr-
2016-06-14 10:31:48 +02:00
parent c74f06da35
commit 54e3099c56
68 changed files with 1755 additions and 1561 deletions

View File

@ -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();
}
_update() {
if (settings.getSettings().endlessScroll) {
this._pageView = new EndlessPageView();
} else {
this._pageView = new ManualPageView();
}
}
run(ctx) {
this._pageView.unrender();
constructor(ctx) {
const extendedContext = {
clientUrl: ctx.clientUrl,
searchQuery: ctx.searchQuery,
};
ctx.headerContext = ctx.headerContext || {};
ctx.pageContext = ctx.pageContext || {};
Object.assign(ctx.headerContext, extendedContext);
Object.assign(ctx.pageContext, extendedContext);
this._pageView.render(ctx);
ctx.headerContext = Object.assign({}, extendedContext);
ctx.pageContext = Object.assign({}, extendedContext);
if (settings.get().endlessScroll) {
this._view = new EndlessPageView(ctx);
} else {
this._view = new ManualPageView(ctx);
}
}
createHistoryCacheProxy(routerCtx, requestPage) {
showSuccess(message) {
this._view.showSuccess(message);
}
showError(message) {
this._view.showError(message);
}
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;