58 lines
1.5 KiB
JavaScript
58 lines
1.5 KiB
JavaScript
import { parseJSON, parseStatus, userFeedbackError } from './response';
|
|
import { config } from 'grav-config';
|
|
import EventEmitter from 'events';
|
|
|
|
export default class GPM extends EventEmitter {
|
|
constructor(action = 'getUpdates') {
|
|
super();
|
|
this.payload = {};
|
|
this.raw = {};
|
|
this.action = action;
|
|
}
|
|
|
|
setPayload(payload = {}) {
|
|
this.payload = payload;
|
|
this.emit('payload', payload);
|
|
|
|
return this;
|
|
}
|
|
|
|
setAction(action = 'getUpdates') {
|
|
this.action = action;
|
|
this.emit('action', action);
|
|
|
|
return this;
|
|
}
|
|
|
|
fetch(callback = () => true, flush = false) {
|
|
let data = new FormData();
|
|
data.append('admin-nonce', config.admin_nonce);
|
|
|
|
if (flush) {
|
|
data.append('flush', true);
|
|
}
|
|
|
|
this.emit('fetching', this);
|
|
|
|
fetch(`${config.base_url_relative}/update.json/task${config.param_sep}getUpdates`, {
|
|
credentials: 'same-origin',
|
|
method: 'post',
|
|
body: data
|
|
}).then((response) => { this.raw = response; return response; })
|
|
.then(parseStatus)
|
|
.then(parseJSON)
|
|
.then((response) => this.response(response))
|
|
.then((response) => callback(response, this.raw))
|
|
.then((response) => this.emit('fetched', this.payload, this.raw, this))
|
|
.catch(userFeedbackError);
|
|
}
|
|
|
|
response(response) {
|
|
this.payload = response;
|
|
|
|
return response;
|
|
}
|
|
}
|
|
|
|
export let Instance = new GPM();
|