2018-06-20 13:20:31 +09:30
|
|
|
import Page from './Page';
|
|
|
|
import LinkButton from '../../common/components/LinkButton';
|
|
|
|
import Button from '../../common/components/Button';
|
|
|
|
import Dropdown from '../../common/components/Dropdown';
|
|
|
|
import Separator from '../../common/components/Separator';
|
|
|
|
import AddExtensionModal from './AddExtensionModal';
|
|
|
|
import LoadingModal from './LoadingModal';
|
|
|
|
import ItemList from '../../common/utils/ItemList';
|
|
|
|
import icon from '../../common/helpers/icon';
|
|
|
|
import listItems from '../../common/helpers/listItems';
|
2015-07-29 20:58:22 +09:30
|
|
|
|
2016-03-11 13:18:16 +10:30
|
|
|
export default class ExtensionsPage extends Page {
|
2015-07-29 20:58:22 +09:30
|
|
|
view() {
|
|
|
|
return (
|
2015-08-03 12:03:30 +09:30
|
|
|
<div className="ExtensionsPage">
|
|
|
|
<div className="ExtensionsPage-header">
|
|
|
|
<div className="container">
|
|
|
|
{Button.component({
|
2015-10-20 13:04:43 +09:00
|
|
|
children: app.translator.trans('core.admin.extensions.add_button'),
|
2018-05-08 23:56:30 -07:00
|
|
|
icon: 'fas fa-plus',
|
2015-08-03 12:03:30 +09:30
|
|
|
className: 'Button Button--primary',
|
2020-04-17 11:57:55 +02:00
|
|
|
onclick: () => app.modal.show(new AddExtensionModal()),
|
2015-08-03 12:03:30 +09:30
|
|
|
})}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className="ExtensionsPage-list">
|
|
|
|
<div className="container">
|
2015-10-13 12:27:10 +10:30
|
|
|
<ul className="ExtensionList">
|
2020-04-17 11:57:55 +02:00
|
|
|
{Object.keys(app.data.extensions).map((id) => {
|
|
|
|
const extension = app.data.extensions[id];
|
|
|
|
const controls = this.controlItems(extension.id).toArray();
|
2015-10-13 12:27:10 +10:30
|
|
|
|
2020-04-17 11:57:55 +02:00
|
|
|
return (
|
|
|
|
<li className={'ExtensionListItem ' + (!this.isEnabled(extension.id) ? 'disabled' : '')}>
|
2015-10-13 12:27:10 +10:30
|
|
|
<div className="ExtensionListItem-content">
|
2016-02-10 15:12:24 +01:00
|
|
|
<span className="ExtensionListItem-icon ExtensionIcon" style={extension.icon}>
|
|
|
|
{extension.icon ? icon(extension.icon.name) : ''}
|
2015-10-13 12:27:10 +10:30
|
|
|
</span>
|
|
|
|
{controls.length ? (
|
|
|
|
<Dropdown
|
|
|
|
className="ExtensionListItem-controls"
|
|
|
|
buttonClassName="Button Button--icon Button--flat"
|
|
|
|
menuClassName="Dropdown-menu--right"
|
2020-04-17 11:57:55 +02:00
|
|
|
icon="fas fa-ellipsis-h"
|
|
|
|
>
|
2015-10-13 12:27:10 +10:30
|
|
|
{controls}
|
|
|
|
</Dropdown>
|
2020-04-17 11:57:55 +02:00
|
|
|
) : (
|
|
|
|
''
|
|
|
|
)}
|
2018-08-22 00:16:02 +03:00
|
|
|
<div className="ExtensionListItem-main">
|
2018-08-21 20:04:18 -04:00
|
|
|
<label className="ExtensionListItem-title">
|
2020-04-17 11:57:55 +02:00
|
|
|
<input type="checkbox" checked={this.isEnabled(extension.id)} onclick={this.toggle.bind(this, extension.id)} />{' '}
|
|
|
|
{extension.extra['flarum-extension'].title}
|
2018-08-21 20:04:18 -04:00
|
|
|
</label>
|
|
|
|
<div className="ExtensionListItem-version">{extension.version}</div>
|
|
|
|
<div className="ExtensionListItem-description">{extension.description}</div>
|
|
|
|
</div>
|
2015-10-13 12:27:10 +10:30
|
|
|
</div>
|
2020-04-17 11:57:55 +02:00
|
|
|
</li>
|
|
|
|
);
|
|
|
|
})}
|
2015-10-13 12:27:10 +10:30
|
|
|
</ul>
|
2015-08-03 12:03:30 +09:30
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
2015-07-29 20:58:22 +09:30
|
|
|
);
|
|
|
|
}
|
2015-08-03 12:03:30 +09:30
|
|
|
|
2015-10-02 17:49:16 +09:30
|
|
|
controlItems(name) {
|
2015-08-03 12:03:30 +09:30
|
|
|
const items = new ItemList();
|
2015-10-02 17:49:16 +09:30
|
|
|
const enabled = this.isEnabled(name);
|
|
|
|
|
2015-10-11 23:18:57 +10:30
|
|
|
if (app.extensionSettings[name]) {
|
2020-04-17 11:57:55 +02:00
|
|
|
items.add(
|
|
|
|
'settings',
|
|
|
|
Button.component({
|
|
|
|
icon: 'fas fa-cog',
|
|
|
|
children: app.translator.trans('core.admin.extensions.settings_button'),
|
|
|
|
onclick: app.extensionSettings[name],
|
|
|
|
})
|
|
|
|
);
|
2015-08-03 12:03:30 +09:30
|
|
|
}
|
|
|
|
|
2015-08-14 12:48:29 +09:30
|
|
|
if (!enabled) {
|
2020-04-17 11:57:55 +02:00
|
|
|
items.add(
|
|
|
|
'uninstall',
|
|
|
|
Button.component({
|
|
|
|
icon: 'far fa-trash-alt',
|
|
|
|
children: app.translator.trans('core.admin.extensions.uninstall_button'),
|
|
|
|
onclick: () => {
|
|
|
|
app
|
|
|
|
.request({
|
|
|
|
url: app.forum.attribute('apiUrl') + '/extensions/' + name,
|
|
|
|
method: 'DELETE',
|
|
|
|
})
|
|
|
|
.then(() => window.location.reload());
|
2015-08-14 12:48:29 +09:30
|
|
|
|
2020-04-17 11:57:55 +02:00
|
|
|
app.modal.show(new LoadingModal());
|
|
|
|
},
|
|
|
|
})
|
|
|
|
);
|
2015-08-14 12:48:29 +09:30
|
|
|
}
|
2015-08-03 12:03:30 +09:30
|
|
|
|
|
|
|
return items;
|
|
|
|
}
|
|
|
|
|
|
|
|
isEnabled(name) {
|
2016-05-26 19:04:24 +09:30
|
|
|
const enabled = JSON.parse(app.data.settings.extensions_enabled);
|
2015-08-03 12:03:30 +09:30
|
|
|
|
|
|
|
return enabled.indexOf(name) !== -1;
|
|
|
|
}
|
2015-10-13 12:27:10 +10:30
|
|
|
|
|
|
|
toggle(id) {
|
|
|
|
const enabled = this.isEnabled(id);
|
|
|
|
|
2020-04-17 11:57:55 +02:00
|
|
|
app
|
|
|
|
.request({
|
|
|
|
url: app.forum.attribute('apiUrl') + '/extensions/' + id,
|
|
|
|
method: 'PATCH',
|
|
|
|
data: { enabled: !enabled },
|
|
|
|
})
|
|
|
|
.then(() => {
|
|
|
|
if (!enabled) localStorage.setItem('enabledExtension', id);
|
|
|
|
window.location.reload();
|
|
|
|
});
|
2015-10-13 12:27:10 +10:30
|
|
|
|
|
|
|
app.modal.show(new LoadingModal());
|
|
|
|
}
|
2015-07-29 20:58:22 +09:30
|
|
|
}
|