mirror of
https://github.com/flarum/core.git
synced 2025-07-18 23:31:17 +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:
82
framework/core/js/admin/dist/app.js
vendored
82
framework/core/js/admin/dist/app.js
vendored
@@ -16669,24 +16669,6 @@ System.register('flarum/App', ['flarum/utils/ItemList', 'flarum/components/Alert
|
||||
*/
|
||||
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.
|
||||
*
|
||||
@@ -16758,10 +16740,12 @@ System.register('flarum/App', ['flarum/utils/ItemList', 'flarum/components/Alert
|
||||
|
||||
babelHelpers.createClass(App, [{
|
||||
key: 'boot',
|
||||
value: function boot() {
|
||||
value: function boot(data) {
|
||||
var _this = this;
|
||||
|
||||
this.translator.locale = this.locale;
|
||||
this.data = data;
|
||||
|
||||
this.translator.locale = data.locale;
|
||||
|
||||
this.initializers.toArray().forEach(function (initializer) {
|
||||
return initializer(_this);
|
||||
@@ -16770,9 +16754,9 @@ System.register('flarum/App', ['flarum/utils/ItemList', 'flarum/components/Alert
|
||||
}, {
|
||||
key: 'preloadedDocument',
|
||||
value: function preloadedDocument() {
|
||||
if (app.preload.document) {
|
||||
var results = app.store.pushPayload(app.preload.document);
|
||||
app.preload.document = null;
|
||||
if (this.data.document) {
|
||||
var results = this.store.pushPayload(this.data.document);
|
||||
this.data.document = null;
|
||||
|
||||
return results;
|
||||
}
|
||||
@@ -17500,10 +17484,10 @@ System.register('flarum/components/AppearancePage', ['flarum/components/Page', '
|
||||
value: function init() {
|
||||
babelHelpers.get(Object.getPrototypeOf(AppearancePage.prototype), 'init', this).call(this);
|
||||
|
||||
this.primaryColor = m.prop(app.settings.theme_primary_color);
|
||||
this.secondaryColor = m.prop(app.settings.theme_secondary_color);
|
||||
this.darkMode = m.prop(app.settings.theme_dark_mode === '1');
|
||||
this.coloredHeader = m.prop(app.settings.theme_colored_header === '1');
|
||||
this.primaryColor = m.prop(app.data.settings.theme_primary_color);
|
||||
this.secondaryColor = m.prop(app.data.settings.theme_secondary_color);
|
||||
this.darkMode = m.prop(app.data.settings.theme_dark_mode === '1');
|
||||
this.coloredHeader = m.prop(app.data.settings.theme_colored_header === '1');
|
||||
}
|
||||
}, {
|
||||
key: 'view',
|
||||
@@ -17702,13 +17686,13 @@ System.register('flarum/components/BasicsPage', ['flarum/components/Page', 'flar
|
||||
this.fields = ['forum_title', 'forum_description', 'default_locale', 'default_route', 'welcome_title', 'welcome_message'];
|
||||
this.values = {};
|
||||
|
||||
var settings = app.settings;
|
||||
var settings = app.data.settings;
|
||||
this.fields.forEach(function (key) {
|
||||
return _this2.values[key] = m.prop(settings[key]);
|
||||
});
|
||||
|
||||
this.localeOptions = {};
|
||||
var locales = app.locales;
|
||||
var locales = app.data.locales;
|
||||
for (var i in locales) {
|
||||
this.localeOptions[i] = locales[i] + ' (' + i + ')';
|
||||
}
|
||||
@@ -17795,7 +17779,7 @@ System.register('flarum/components/BasicsPage', ['flarum/components/Page', 'flar
|
||||
var _this4 = this;
|
||||
|
||||
return this.fields.some(function (key) {
|
||||
return _this4.values[key]() !== app.settings[key];
|
||||
return _this4.values[key]() !== app.data.settings[key];
|
||||
});
|
||||
}
|
||||
}, {
|
||||
@@ -18212,7 +18196,7 @@ System.register('flarum/components/EditCustomCssModal', ['flarum/components/Moda
|
||||
babelHelpers.createClass(EditCustomCssModal, [{
|
||||
key: 'init',
|
||||
value: function init() {
|
||||
this.customLess = m.prop(app.settings.custom_less || '');
|
||||
this.customLess = m.prop(app.data.settings.custom_less || '');
|
||||
}
|
||||
}, {
|
||||
key: 'className',
|
||||
@@ -18495,8 +18479,8 @@ System.register('flarum/components/ExtensionsPage', ['flarum/components/Page', '
|
||||
m(
|
||||
'ul',
|
||||
{ className: 'ExtensionList' },
|
||||
Object.keys(app.extensions).map(function (id) {
|
||||
var extension = app.extensions[id];
|
||||
Object.keys(app.data.extensions).map(function (id) {
|
||||
var extension = app.data.extensions[id];
|
||||
var controls = _this2.controlItems(extension.id).toArray();
|
||||
|
||||
return m(
|
||||
@@ -18576,7 +18560,7 @@ System.register('flarum/components/ExtensionsPage', ['flarum/components/Page', '
|
||||
}, {
|
||||
key: 'isEnabled',
|
||||
value: function isEnabled(name) {
|
||||
var enabled = JSON.parse(app.settings.extensions_enabled);
|
||||
var enabled = JSON.parse(app.data.settings.extensions_enabled);
|
||||
|
||||
return enabled.indexOf(name) !== -1;
|
||||
}
|
||||
@@ -18970,7 +18954,7 @@ System.register('flarum/components/MailPage', ['flarum/components/Page', 'flarum
|
||||
this.fields = ['mail_driver', 'mail_host', 'mail_from', 'mail_port', 'mail_username', 'mail_password', 'mail_encryption'];
|
||||
this.values = {};
|
||||
|
||||
var settings = app.settings;
|
||||
var settings = app.data.settings;
|
||||
this.fields.forEach(function (key) {
|
||||
return _this2.values[key] = m.prop(settings[key]);
|
||||
});
|
||||
@@ -19086,7 +19070,7 @@ System.register('flarum/components/MailPage', ['flarum/components/Page', 'flarum
|
||||
var _this3 = this;
|
||||
|
||||
return this.fields.some(function (key) {
|
||||
return _this3.values[key]() !== app.settings[key];
|
||||
return _this3.values[key]() !== app.data.settings[key];
|
||||
});
|
||||
}
|
||||
}, {
|
||||
@@ -19567,7 +19551,7 @@ System.register('flarum/components/PermissionDropdown', ['flarum/components/Drop
|
||||
|
||||
this.props.children = [];
|
||||
|
||||
var groupIds = app.permissions[this.props.permission] || [];
|
||||
var groupIds = app.data.permissions[this.props.permission] || [];
|
||||
var everyone = groupIds.indexOf(Group.GUEST_ID) !== -1;
|
||||
var members = groupIds.indexOf(Group.MEMBER_ID) !== -1;
|
||||
var adminGroup = app.store.getById('groups', Group.ADMINISTRATOR_ID);
|
||||
@@ -19626,7 +19610,7 @@ System.register('flarum/components/PermissionDropdown', ['flarum/components/Drop
|
||||
value: function save(groupIds) {
|
||||
var permission = this.props.permission;
|
||||
|
||||
app.permissions[permission] = groupIds;
|
||||
app.data.permissions[permission] = groupIds;
|
||||
|
||||
app.request({
|
||||
method: 'POST',
|
||||
@@ -19639,7 +19623,7 @@ System.register('flarum/components/PermissionDropdown', ['flarum/components/Drop
|
||||
value: function toggle(groupId) {
|
||||
var permission = this.props.permission;
|
||||
|
||||
var groupIds = app.permissions[permission] || [];
|
||||
var groupIds = app.data.permissions[permission] || [];
|
||||
|
||||
var index = groupIds.indexOf(groupId);
|
||||
|
||||
@@ -19843,7 +19827,7 @@ System.register('flarum/components/PermissionGrid', ['flarum/Component', 'flarum
|
||||
icon: 'i-cursor',
|
||||
label: app.translator.trans('core.admin.permissions.allow_renaming_label'),
|
||||
setting: function setting() {
|
||||
var minutes = parseInt(app.settings.allow_renaming, 10);
|
||||
var minutes = parseInt(app.data.settings.allow_renaming, 10);
|
||||
|
||||
return SettingDropdown.component({
|
||||
defaultLabel: minutes ? app.translator.transChoice('core.admin.permissions_controls.allow_some_minutes_button', minutes, { count: minutes }) : app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button'),
|
||||
@@ -19870,7 +19854,7 @@ System.register('flarum/components/PermissionGrid', ['flarum/Component', 'flarum
|
||||
icon: 'pencil',
|
||||
label: app.translator.trans('core.admin.permissions.allow_post_editing_label'),
|
||||
setting: function setting() {
|
||||
var minutes = parseInt(app.settings.allow_post_editing, 10);
|
||||
var minutes = parseInt(app.data.settings.allow_post_editing, 10);
|
||||
|
||||
return SettingDropdown.component({
|
||||
defaultLabel: minutes ? app.translator.transChoice('core.admin.permissions_controls.allow_some_minutes_button', minutes, { count: minutes }) : app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button'),
|
||||
@@ -20399,7 +20383,7 @@ System.register('flarum/components/SettingDropdown', ['flarum/components/SelectD
|
||||
var value = _ref.value;
|
||||
var label = _ref.label;
|
||||
|
||||
var active = app.settings[props.key] === value;
|
||||
var active = app.data.settings[props.key] === value;
|
||||
|
||||
return Button.component({
|
||||
children: label,
|
||||
@@ -20485,7 +20469,7 @@ System.register('flarum/components/SettingsModal', ['flarum/components/Modal', '
|
||||
value: function setting(key) {
|
||||
var fallback = arguments.length <= 1 || arguments[1] === undefined ? '' : arguments[1];
|
||||
|
||||
this.settings[key] = this.settings[key] || m.prop(app.settings[key] || fallback);
|
||||
this.settings[key] = this.settings[key] || m.prop(app.data.settings[key] || fallback);
|
||||
|
||||
return this.settings[key];
|
||||
}
|
||||
@@ -20499,7 +20483,7 @@ System.register('flarum/components/SettingsModal', ['flarum/components/Modal', '
|
||||
Object.keys(this.settings).forEach(function (key) {
|
||||
var value = _this2.settings[key]();
|
||||
|
||||
if (value !== app.settings[key]) {
|
||||
if (value !== app.data.settings[key]) {
|
||||
dirty[key] = value;
|
||||
}
|
||||
});
|
||||
@@ -21130,11 +21114,11 @@ System.register('flarum/initializers/humanTime', ['flarum/utils/humanTime'], fun
|
||||
System.register('flarum/initializers/preload', ['flarum/Session'], function (_export, _context) {
|
||||
var Session;
|
||||
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.session = new Session(app.store.getById('users', app.data.session.userId), app.data.session.csrfToken);
|
||||
}
|
||||
|
||||
_export('default', preload);
|
||||
@@ -22977,16 +22961,16 @@ System.register("flarum/utils/RequestError", [], function (_export, _context) {
|
||||
|
||||
System.register('flarum/utils/saveSettings', [], function (_export, _context) {
|
||||
function saveSettings(settings) {
|
||||
var oldSettings = JSON.parse(JSON.stringify(app.settings));
|
||||
var oldSettings = JSON.parse(JSON.stringify(app.data.settings));
|
||||
|
||||
babelHelpers.extends(app.settings, settings);
|
||||
babelHelpers.extends(app.data.settings, settings);
|
||||
|
||||
return app.request({
|
||||
method: 'POST',
|
||||
url: app.forum.attribute('apiUrl') + '/settings',
|
||||
data: settings
|
||||
}).catch(function (error) {
|
||||
app.settings = oldSettings;
|
||||
app.data.settings = oldSettings;
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
@@ -8,10 +8,10 @@ export default class AppearancePage extends Page {
|
||||
init() {
|
||||
super.init();
|
||||
|
||||
this.primaryColor = m.prop(app.settings.theme_primary_color);
|
||||
this.secondaryColor = m.prop(app.settings.theme_secondary_color);
|
||||
this.darkMode = m.prop(app.settings.theme_dark_mode === '1');
|
||||
this.coloredHeader = m.prop(app.settings.theme_colored_header === '1');
|
||||
this.primaryColor = m.prop(app.data.settings.theme_primary_color);
|
||||
this.secondaryColor = m.prop(app.data.settings.theme_secondary_color);
|
||||
this.darkMode = m.prop(app.data.settings.theme_dark_mode === '1');
|
||||
this.coloredHeader = m.prop(app.data.settings.theme_colored_header === '1');
|
||||
}
|
||||
|
||||
view() {
|
||||
|
@@ -22,11 +22,11 @@ export default class BasicsPage extends Page {
|
||||
];
|
||||
this.values = {};
|
||||
|
||||
const settings = app.settings;
|
||||
const settings = app.data.settings;
|
||||
this.fields.forEach(key => this.values[key] = m.prop(settings[key]));
|
||||
|
||||
this.localeOptions = {};
|
||||
const locales = app.locales;
|
||||
const locales = app.data.locales;
|
||||
for (const i in locales) {
|
||||
this.localeOptions[i] = `${locales[i]} (${i})`;
|
||||
}
|
||||
@@ -110,7 +110,7 @@ export default class BasicsPage extends Page {
|
||||
}
|
||||
|
||||
changed() {
|
||||
return this.fields.some(key => this.values[key]() !== app.settings[key]);
|
||||
return this.fields.some(key => this.values[key]() !== app.data.settings[key]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -4,7 +4,7 @@ import saveSettings from 'flarum/utils/saveSettings';
|
||||
|
||||
export default class EditCustomCssModal extends Modal {
|
||||
init() {
|
||||
this.customLess = m.prop(app.settings.custom_less || '');
|
||||
this.customLess = m.prop(app.data.settings.custom_less || '');
|
||||
}
|
||||
|
||||
className() {
|
||||
|
@@ -27,9 +27,9 @@ export default class ExtensionsPage extends Page {
|
||||
<div className="ExtensionsPage-list">
|
||||
<div className="container">
|
||||
<ul className="ExtensionList">
|
||||
{Object.keys(app.extensions)
|
||||
{Object.keys(app.data.extensions)
|
||||
.map(id => {
|
||||
const extension = app.extensions[id];
|
||||
const extension = app.data.extensions[id];
|
||||
const controls = this.controlItems(extension.id).toArray();
|
||||
|
||||
return <li className={'ExtensionListItem ' + (!this.isEnabled(extension.id) ? 'disabled' : '')}>
|
||||
@@ -92,7 +92,7 @@ export default class ExtensionsPage extends Page {
|
||||
}
|
||||
|
||||
isEnabled(name) {
|
||||
const enabled = JSON.parse(app.settings.extensions_enabled);
|
||||
const enabled = JSON.parse(app.data.settings.extensions_enabled);
|
||||
|
||||
return enabled.indexOf(name) !== -1;
|
||||
}
|
||||
|
@@ -21,7 +21,7 @@ export default class MailPage extends Page {
|
||||
];
|
||||
this.values = {};
|
||||
|
||||
const settings = app.settings;
|
||||
const settings = app.data.settings;
|
||||
this.fields.forEach(key => this.values[key] = m.prop(settings[key]));
|
||||
|
||||
this.localeOptions = {};
|
||||
@@ -96,7 +96,7 @@ export default class MailPage extends Page {
|
||||
}
|
||||
|
||||
changed() {
|
||||
return this.fields.some(key => this.values[key]() !== app.settings[key]);
|
||||
return this.fields.some(key => this.values[key]() !== app.data.settings[key]);
|
||||
}
|
||||
|
||||
onsubmit(e) {
|
||||
|
@@ -21,7 +21,7 @@ export default class PermissionDropdown extends Dropdown {
|
||||
view() {
|
||||
this.props.children = [];
|
||||
|
||||
const groupIds = app.permissions[this.props.permission] || [];
|
||||
const groupIds = app.data.permissions[this.props.permission] || [];
|
||||
const everyone = groupIds.indexOf(Group.GUEST_ID) !== -1;
|
||||
const members = groupIds.indexOf(Group.MEMBER_ID) !== -1;
|
||||
const adminGroup = app.store.getById('groups', Group.ADMINISTRATOR_ID);
|
||||
@@ -87,7 +87,7 @@ export default class PermissionDropdown extends Dropdown {
|
||||
save(groupIds) {
|
||||
const permission = this.props.permission;
|
||||
|
||||
app.permissions[permission] = groupIds;
|
||||
app.data.permissions[permission] = groupIds;
|
||||
|
||||
app.request({
|
||||
method: 'POST',
|
||||
@@ -99,7 +99,7 @@ export default class PermissionDropdown extends Dropdown {
|
||||
toggle(groupId) {
|
||||
const permission = this.props.permission;
|
||||
|
||||
let groupIds = app.permissions[permission] || [];
|
||||
let groupIds = app.data.permissions[permission] || [];
|
||||
|
||||
const index = groupIds.indexOf(groupId);
|
||||
|
||||
|
@@ -119,7 +119,7 @@ export default class PermissionGrid extends Component {
|
||||
icon: 'i-cursor',
|
||||
label: app.translator.trans('core.admin.permissions.allow_renaming_label'),
|
||||
setting: () => {
|
||||
const minutes = parseInt(app.settings.allow_renaming, 10);
|
||||
const minutes = parseInt(app.data.settings.allow_renaming, 10);
|
||||
|
||||
return SettingDropdown.component({
|
||||
defaultLabel: minutes
|
||||
@@ -151,7 +151,7 @@ export default class PermissionGrid extends Component {
|
||||
icon: 'pencil',
|
||||
label: app.translator.trans('core.admin.permissions.allow_post_editing_label'),
|
||||
setting: () => {
|
||||
const minutes = parseInt(app.settings.allow_post_editing, 10);
|
||||
const minutes = parseInt(app.data.settings.allow_post_editing, 10);
|
||||
|
||||
return SettingDropdown.component({
|
||||
defaultLabel: minutes
|
||||
|
@@ -12,7 +12,7 @@ export default class SettingDropdown extends SelectDropdown {
|
||||
props.defaultLabel = 'Custom';
|
||||
|
||||
props.children = props.options.map(({value, label}) => {
|
||||
const active = app.settings[props.key] === value;
|
||||
const active = app.data.settings[props.key] === value;
|
||||
|
||||
return Button.component({
|
||||
children: label,
|
||||
|
@@ -39,7 +39,7 @@ export default class SettingsModal extends Modal {
|
||||
}
|
||||
|
||||
setting(key, fallback = '') {
|
||||
this.settings[key] = this.settings[key] || m.prop(app.settings[key] || fallback);
|
||||
this.settings[key] = this.settings[key] || m.prop(app.data.settings[key] || fallback);
|
||||
|
||||
return this.settings[key];
|
||||
}
|
||||
@@ -50,7 +50,7 @@ export default class SettingsModal extends Modal {
|
||||
Object.keys(this.settings).forEach(key => {
|
||||
const value = this.settings[key]();
|
||||
|
||||
if (value !== app.settings[key]) {
|
||||
if (value !== app.data.settings[key]) {
|
||||
dirty[key] = value;
|
||||
}
|
||||
});
|
||||
|
@@ -1,14 +1,14 @@
|
||||
export default function saveSettings(settings) {
|
||||
const oldSettings = JSON.parse(JSON.stringify(app.settings));
|
||||
const oldSettings = JSON.parse(JSON.stringify(app.data.settings));
|
||||
|
||||
Object.assign(app.settings, settings);
|
||||
Object.assign(app.data.settings, settings);
|
||||
|
||||
return app.request({
|
||||
method: 'POST',
|
||||
url: app.forum.attribute('apiUrl') + '/settings',
|
||||
data: settings
|
||||
}).catch(error => {
|
||||
app.settings = oldSettings;
|
||||
app.data.settings = oldSettings;
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
26
framework/core/js/forum/dist/app.js
vendored
26
framework/core/js/forum/dist/app.js
vendored
@@ -18418,10 +18418,12 @@ System.register('flarum/App', ['flarum/utils/ItemList', 'flarum/components/Alert
|
||||
|
||||
babelHelpers.createClass(App, [{
|
||||
key: 'boot',
|
||||
value: function boot() {
|
||||
value: function boot(data) {
|
||||
var _this = this;
|
||||
|
||||
this.translator.locale = this.locale;
|
||||
this.data = data;
|
||||
|
||||
this.translator.locale = data.locale;
|
||||
|
||||
this.initializers.toArray().forEach(function (initializer) {
|
||||
return initializer(_this);
|
||||
@@ -18430,9 +18432,9 @@ System.register('flarum/App', ['flarum/utils/ItemList', 'flarum/components/Alert
|
||||
}, {
|
||||
key: 'preloadedDocument',
|
||||
value: function preloadedDocument() {
|
||||
if (app.preload.document) {
|
||||
var results = app.store.pushPayload(app.preload.document);
|
||||
app.preload.document = null;
|
||||
if (this.data.document) {
|
||||
var results = this.store.pushPayload(this.data.document);
|
||||
this.data.document = null;
|
||||
|
||||
return results;
|
||||
}
|
||||
@@ -22305,14 +22307,14 @@ System.register('flarum/components/HeaderSecondary', ['flarum/Component', 'flaru
|
||||
|
||||
items.add('search', app.search.render(), 30);
|
||||
|
||||
if (Object.keys(app.locales).length > 1) {
|
||||
if (Object.keys(app.data.locales).length > 1) {
|
||||
var locales = [];
|
||||
|
||||
var _loop = function _loop(locale) {
|
||||
locales.push(Button.component({
|
||||
active: app.locale === locale,
|
||||
children: app.locales[locale],
|
||||
icon: app.locale === locale ? 'check' : true,
|
||||
active: app.data.locale === locale,
|
||||
children: app.data.locales[locale],
|
||||
icon: app.data.locale === locale ? 'check' : true,
|
||||
onclick: function onclick() {
|
||||
if (app.session.user) {
|
||||
app.session.user.savePreferences({ locale: locale }).then(function () {
|
||||
@@ -22326,7 +22328,7 @@ System.register('flarum/components/HeaderSecondary', ['flarum/Component', 'flaru
|
||||
}));
|
||||
};
|
||||
|
||||
for (var locale in app.locales) {
|
||||
for (var locale in app.data.locales) {
|
||||
_loop(locale);
|
||||
}
|
||||
|
||||
@@ -28664,11 +28666,11 @@ System.register('flarum/initializers/humanTime', ['flarum/utils/humanTime'], fun
|
||||
System.register('flarum/initializers/preload', ['flarum/Session'], function (_export, _context) {
|
||||
var Session;
|
||||
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.session = new Session(app.store.getById('users', app.data.session.userId), app.data.session.csrfToken);
|
||||
}
|
||||
|
||||
_export('default', preload);
|
||||
|
@@ -39,14 +39,14 @@ export default class HeaderSecondary extends Component {
|
||||
|
||||
items.add('search', app.search.render(), 30);
|
||||
|
||||
if (Object.keys(app.locales).length > 1) {
|
||||
if (Object.keys(app.data.locales).length > 1) {
|
||||
const locales = [];
|
||||
|
||||
for (const locale in app.locales) {
|
||||
for (const locale in app.data.locales) {
|
||||
locales.push(Button.component({
|
||||
active: app.locale === locale,
|
||||
children: app.locales[locale],
|
||||
icon: app.locale === locale ? 'check' : true,
|
||||
active: app.data.locale === locale,
|
||||
children: app.data.locales[locale],
|
||||
icon: app.data.locale === locale ? 'check' : true,
|
||||
onclick: () => {
|
||||
if (app.session.user) {
|
||||
app.session.user.savePreferences({locale}).then(() => window.location.reload());
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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
|
||||
);
|
||||
}
|
||||
|
Reference in New Issue
Block a user