2016-06-17 20:25:44 +02:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const api = require('../api.js');
|
2017-01-20 21:51:04 +01:00
|
|
|
const uri = require('../util/uri.js');
|
2016-06-17 20:25:44 +02:00
|
|
|
const events = require('../events.js');
|
|
|
|
|
|
|
|
class Comment extends events.EventTarget {
|
|
|
|
constructor() {
|
|
|
|
super();
|
2016-07-26 21:01:52 +02:00
|
|
|
this._updateFromResponse({});
|
2016-06-17 20:25:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static create(postId) {
|
|
|
|
const comment = new Comment();
|
|
|
|
comment._postId = postId;
|
|
|
|
return comment;
|
|
|
|
}
|
|
|
|
|
|
|
|
static fromResponse(response) {
|
|
|
|
const comment = new Comment();
|
|
|
|
comment._updateFromResponse(response);
|
|
|
|
return comment;
|
|
|
|
}
|
|
|
|
|
2016-06-19 19:16:40 +02:00
|
|
|
get id() { return this._id; }
|
|
|
|
get postId() { return this._postId; }
|
2016-12-24 21:49:39 +01:00
|
|
|
get text() { return this._text || ''; }
|
2016-06-19 19:16:40 +02:00
|
|
|
get user() { return this._user; }
|
2016-06-17 20:25:44 +02:00
|
|
|
get creationTime() { return this._creationTime; }
|
|
|
|
get lastEditTime() { return this._lastEditTime; }
|
2016-06-19 19:16:40 +02:00
|
|
|
get score() { return this._score; }
|
|
|
|
get ownScore() { return this._ownScore; }
|
2016-06-17 20:25:44 +02:00
|
|
|
|
2016-06-19 19:16:40 +02:00
|
|
|
set text(value) { this._text = value; }
|
2016-06-17 20:25:44 +02:00
|
|
|
|
|
|
|
save() {
|
2016-08-06 22:44:04 +02:00
|
|
|
const detail = {
|
|
|
|
version: this._version,
|
|
|
|
text: this._text,
|
|
|
|
};
|
|
|
|
let promise = this._id ?
|
2017-01-20 21:51:04 +01:00
|
|
|
api.put(uri.formatApiLink('comment', this.id), detail) :
|
|
|
|
api.post(uri.formatApiLink('comments'),
|
|
|
|
Object.assign({postId: this._postId}, detail));
|
2016-06-17 20:25:44 +02:00
|
|
|
|
|
|
|
return promise.then(response => {
|
|
|
|
this._updateFromResponse(response);
|
|
|
|
this.dispatchEvent(new CustomEvent('change', {
|
2016-06-19 19:16:40 +02:00
|
|
|
detail: {
|
2016-06-17 20:25:44 +02:00
|
|
|
comment: this,
|
|
|
|
},
|
|
|
|
}));
|
|
|
|
return Promise.resolve();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
delete() {
|
2016-08-06 22:44:04 +02:00
|
|
|
return api.delete(
|
2017-01-20 21:51:04 +01:00
|
|
|
uri.formatApiLink('comment', this.id),
|
2016-08-06 22:44:04 +02:00
|
|
|
{version: this._version})
|
2016-06-17 20:25:44 +02:00
|
|
|
.then(response => {
|
|
|
|
this.dispatchEvent(new CustomEvent('delete', {
|
2016-06-19 19:16:40 +02:00
|
|
|
detail: {
|
2016-06-17 20:25:44 +02:00
|
|
|
comment: this,
|
|
|
|
},
|
|
|
|
}));
|
|
|
|
return Promise.resolve();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
setScore(score) {
|
2017-01-20 21:51:04 +01:00
|
|
|
return api.put(
|
|
|
|
uri.formatApiLink('comment', this.id, 'score'),
|
|
|
|
{score: score})
|
2016-06-17 20:25:44 +02:00
|
|
|
.then(response => {
|
|
|
|
this._updateFromResponse(response);
|
|
|
|
this.dispatchEvent(new CustomEvent('changeScore', {
|
2016-06-19 19:16:40 +02:00
|
|
|
detail: {
|
2016-06-17 20:25:44 +02:00
|
|
|
comment: this,
|
|
|
|
},
|
|
|
|
}));
|
|
|
|
return Promise.resolve();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
_updateFromResponse(response) {
|
2016-08-06 22:44:04 +02:00
|
|
|
this._version = response.version;
|
2016-06-19 19:16:40 +02:00
|
|
|
this._id = response.id;
|
|
|
|
this._postId = response.postId;
|
|
|
|
this._text = response.text;
|
|
|
|
this._user = response.user;
|
2016-06-17 20:25:44 +02:00
|
|
|
this._creationTime = response.creationTime;
|
|
|
|
this._lastEditTime = response.lastEditTime;
|
2016-06-19 19:16:40 +02:00
|
|
|
this._score = parseInt(response.score);
|
|
|
|
this._ownScore = parseInt(response.ownScore);
|
2016-06-17 20:25:44 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = Comment;
|