1
0
mirror of https://github.com/flarum/core.git synced 2025-10-12 23:44:27 +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 2525e3e7ad
commit 9bfb797fdc
49 changed files with 1575 additions and 1254 deletions

View File

@@ -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() {

View File

@@ -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]);
}
/**

View File

@@ -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() {

View File

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

View File

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

View File

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

View File

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

View File

@@ -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,

View File

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