mirror of
https://github.com/flarum/framework.git
synced 2024-12-06 01:23:38 +08:00
102 lines
2.1 KiB
JavaScript
102 lines
2.1 KiB
JavaScript
import Button from '../../common/components/Button';
|
|
|
|
export default class UploadImageButton extends Button {
|
|
init() {
|
|
this.loading = false;
|
|
}
|
|
|
|
view() {
|
|
this.props.loading = this.loading;
|
|
this.props.className = (this.props.className || '') + ' Button';
|
|
|
|
if (app.data.settings[this.props.name + '_path']) {
|
|
this.props.onclick = this.remove.bind(this);
|
|
this.props.children = app.translator.trans('core.admin.upload_image.remove_button');
|
|
|
|
return (
|
|
<div>
|
|
<p>
|
|
<img src={app.forum.attribute(this.props.name + 'Url')} alt="" />
|
|
</p>
|
|
<p>{super.view()}</p>
|
|
</div>
|
|
);
|
|
} else {
|
|
this.props.onclick = this.upload.bind(this);
|
|
this.props.children = app.translator.trans('core.admin.upload_image.upload_button');
|
|
}
|
|
|
|
return super.view();
|
|
}
|
|
|
|
/**
|
|
* Prompt the user to upload an image.
|
|
*/
|
|
upload() {
|
|
if (this.loading) return;
|
|
|
|
const $input = $('<input type="file">');
|
|
|
|
$input
|
|
.appendTo('body')
|
|
.hide()
|
|
.click()
|
|
.on('change', (e) => {
|
|
const data = new FormData();
|
|
data.append(this.props.name, $(e.target)[0].files[0]);
|
|
|
|
this.loading = true;
|
|
m.redraw();
|
|
|
|
app
|
|
.request({
|
|
method: 'POST',
|
|
url: this.resourceUrl(),
|
|
serialize: (raw) => raw,
|
|
data,
|
|
})
|
|
.then(this.success.bind(this), this.failure.bind(this));
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Remove the logo.
|
|
*/
|
|
remove() {
|
|
this.loading = true;
|
|
m.redraw();
|
|
|
|
app
|
|
.request({
|
|
method: 'DELETE',
|
|
url: this.resourceUrl(),
|
|
})
|
|
.then(this.success.bind(this), this.failure.bind(this));
|
|
}
|
|
|
|
resourceUrl() {
|
|
return app.forum.attribute('apiUrl') + '/' + this.props.name;
|
|
}
|
|
|
|
/**
|
|
* After a successful upload/removal, reload the page.
|
|
*
|
|
* @param {Object} response
|
|
* @protected
|
|
*/
|
|
success(response) {
|
|
window.location.reload();
|
|
}
|
|
|
|
/**
|
|
* If upload/removal fails, stop loading.
|
|
*
|
|
* @param {Object} response
|
|
* @protected
|
|
*/
|
|
failure(response) {
|
|
this.loading = false;
|
|
m.redraw();
|
|
}
|
|
}
|