szurubooru/client/js/models/comment.js

134 lines
3.2 KiB
JavaScript

"use strict";
const api = require("../api.js");
const uri = require("../util/uri.js");
const events = require("../events.js");
class Comment extends events.EventTarget {
constructor() {
super();
this._updateFromResponse({});
}
static create(postId) {
const comment = new Comment();
comment._postId = postId;
return comment;
}
static fromResponse(response) {
const comment = new Comment();
comment._updateFromResponse(response);
return comment;
}
get id() {
return this._id;
}
get postId() {
return this._postId;
}
get text() {
return this._text || "";
}
get user() {
return this._user;
}
get creationTime() {
return this._creationTime;
}
get lastEditTime() {
return this._lastEditTime;
}
get score() {
return this._score;
}
get ownScore() {
return this._ownScore;
}
set text(value) {
this._text = value;
}
save() {
const detail = {
version: this._version,
text: this._text,
};
let promise = this._id
? api.put(uri.formatApiLink("comment", this.id), detail)
: api.post(
uri.formatApiLink("comments"),
Object.assign({ postId: this._postId }, detail)
);
return promise.then((response) => {
this._updateFromResponse(response);
this.dispatchEvent(
new CustomEvent("change", {
detail: {
comment: this,
},
})
);
return Promise.resolve();
});
}
delete() {
return api
.delete(uri.formatApiLink("comment", this.id), {
version: this._version,
})
.then((response) => {
this.dispatchEvent(
new CustomEvent("delete", {
detail: {
comment: this,
},
})
);
return Promise.resolve();
});
}
setScore(score) {
return api
.put(uri.formatApiLink("comment", this.id, "score"), {
score: score,
})
.then((response) => {
this._updateFromResponse(response);
this.dispatchEvent(
new CustomEvent("changeScore", {
detail: {
comment: this,
},
})
);
return Promise.resolve();
});
}
_updateFromResponse(response) {
this._version = response.version;
this._id = response.id;
this._postId = response.postId;
this._text = response.text;
this._user = response.user;
this._creationTime = response.creationTime;
this._lastEditTime = response.lastEditTime;
this._score = parseInt(response.score);
this._ownScore = parseInt(response.ownScore);
}
}
module.exports = Comment;