client+server: add tag category ordering feature

Fixes  #209
This commit is contained in:
neobooru
2020-09-19 22:54:26 +02:00
parent 1ef0419dc2
commit 06ad8b1882
12 changed files with 87 additions and 4 deletions

View File

@ -26,6 +26,7 @@ class TagCategoriesController {
tagCategories: this._tagCategories,
canEditName: api.hasPrivilege("tagCategories:edit:name"),
canEditColor: api.hasPrivilege("tagCategories:edit:color"),
canEditOrder: api.hasPrivilege("tagCategories:edit:order"),
canDelete: api.hasPrivilege("tagCategories:delete"),
canCreate: api.hasPrivilege("tagCategories:create"),
canSetDefault: api.hasPrivilege(

View File

@ -9,10 +9,12 @@ class TagCategory extends events.EventTarget {
super();
this._name = "";
this._color = "#000000";
this._order = 1;
this._tagCount = 0;
this._isDefault = false;
this._origName = null;
this._origColor = null;
this._origOrder = null;
}
get name() {
@ -23,6 +25,10 @@ class TagCategory extends events.EventTarget {
return this._color;
}
get order() {
return this._order;
}
get tagCount() {
return this._tagCount;
}
@ -43,6 +49,10 @@ class TagCategory extends events.EventTarget {
this._color = value;
}
set order(value) {
this._order = value;
}
static fromResponse(response) {
const ret = new TagCategory();
ret._updateFromResponse(response);
@ -58,6 +68,9 @@ class TagCategory extends events.EventTarget {
if (this.color !== this._origColor) {
detail.color = this.color;
}
if (this.order !== this._origOrder) {
detail.order = this.order;
}
if (!Object.keys(detail).length) {
return Promise.resolve();
@ -65,9 +78,9 @@ class TagCategory extends events.EventTarget {
let promise = this._origName
? api.put(
uri.formatApiLink("tag-category", this._origName),
detail
)
uri.formatApiLink("tag-category", this._origName),
detail
)
: api.post(uri.formatApiLink("tag-categories"), detail);
return promise.then((response) => {
@ -104,10 +117,12 @@ class TagCategory extends events.EventTarget {
this._version = response.version;
this._name = response.name;
this._color = response.color;
this._order = response.order;
this._isDefault = response.default;
this._tagCount = response.usages;
this._origName = this.name;
this._origColor = this.color;
this._origOrder = this.order;
}
}

View File

@ -100,6 +100,13 @@ class TagCategoriesView extends events.EventTarget {
);
}
const orderInput = rowNode.querySelector(".order input");
if (orderInput) {
orderInput.addEventListener("change", (e) =>
this._evtOrderChange(e, rowNode)
);
}
const removeLinkNode = rowNode.querySelector(".remove a");
if (removeLinkNode) {
removeLinkNode.addEventListener("click", (e) =>
@ -147,6 +154,10 @@ class TagCategoriesView extends events.EventTarget {
rowNode._tagCategory.color = e.target.value;
}
_evtOrderChange(e, rowNode) {
rowNode._tagCategory.order = e.target.value;
}
_evtDeleteButtonClick(e, rowNode, link) {
e.preventDefault();
if (e.target.classList.contains("inactive")) {