1
0
mirror of https://github.com/flarum/core.git synced 2025-07-21 16:51:34 +02:00

Refactor the web app bootstrapping code

- All custom JS variables are now preloaded into the `app.data` object, rather than directly on the `app` object. This means that admin settings are available in `app.data.settings` rather than `app.settings`, etc.
- Cleaner route handler generation
- Renamed ConfigureClientView to ConfigureWebApp, though the former still exists and is deprecated
- Partial fix for #881 (strips ?nojs=1 from URL if possible, so that refreshing will attempt to load JS version again)
This commit is contained in:
Toby Zerner
2016-05-26 19:04:24 +09:30
parent e07b5eb8eb
commit d2bce5d756
49 changed files with 1575 additions and 1254 deletions

View File

@@ -40,24 +40,6 @@ export default class App {
*/
this.routes = {};
/**
* An object containing data to preload into the application.
*
* @type {Object}
* @property {Object} preload.data An array of resource objects to preload
* into the data store.
* @property {Object} preload.document An API response document to be used
* by the route that is first activated.
* @property {Object} preload.session A response from the /api/token
* endpoint containing the session's authentication token and user ID.
* @public
*/
this.preload = {
data: null,
document: null,
session: null
};
/**
* An ordered list of initializers to bootstrap the application.
*
@@ -125,8 +107,10 @@ export default class App {
*
* @public
*/
boot() {
this.translator.locale = this.locale;
boot(data) {
this.data = data;
this.translator.locale = data.locale;
this.initializers.toArray().forEach(initializer => initializer(this));
}
@@ -138,9 +122,9 @@ export default class App {
* @public
*/
preloadedDocument() {
if (app.preload.document) {
const results = app.store.pushPayload(app.preload.document);
app.preload.document = null;
if (this.data.document) {
const results = this.store.pushPayload(this.data.document);
this.data.document = null;
return results;
}

View File

@@ -13,12 +13,12 @@ import Session from 'flarum/Session';
* @param {App} app
*/
export default function preload(app) {
app.store.pushPayload({data: app.preload.data});
app.store.pushPayload({data: app.data.resources});
app.forum = app.store.getById('forums', 1);
app.session = new Session(
app.store.getById('users', app.preload.session.userId),
app.preload.session.csrfToken
app.store.getById('users', app.data.session.userId),
app.data.session.csrfToken
);
}