summaryrefslogtreecommitdiff
path: root/client/js/views/post_upload_view.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/js/views/post_upload_view.js')
-rw-r--r--client/js/views/post_upload_view.js60
1 files changed, 55 insertions, 5 deletions
diff --git a/client/js/views/post_upload_view.js b/client/js/views/post_upload_view.js
index 4ef4c1a..83fdf12 100644
--- a/client/js/views/post_upload_view.js
+++ b/client/js/views/post_upload_view.js
@@ -4,10 +4,16 @@ const events = require("../events.js");
const api = require("../api.js");
const views = require("../util/views.js");
const FileDropperControl = require("../controls/file_dropper_control.js");
+const TagList = require("../models/tag_list.js");
+const TagInputControl = require("../controls/tag_input_control.js");
const template = views.getTemplate("post-upload");
const rowTemplate = views.getTemplate("post-upload-row");
+const misc = require("../util/misc.js");
+const TagAutoCompleteControl =
+ require("../controls/tag_auto_complete_control.js");
+
function _mimeTypeToPostType(mimeType) {
return (
{
@@ -178,6 +184,11 @@ class PostUploadView extends events.EventTarget {
this._evtUrlsAdded(e)
);
+ this._skipDuplicatesCheckboxNode.addEventListener("change", e =>
+ this._evtSkipDuplicatesCheck(e, this._skipDuplicatesCheckboxNode.checked)
+ );
+ this._copyTagsToOriginalsSpanNode.hidden = true;
+
this._cancelButtonNode.addEventListener("click", (e) =>
this._evtCancelButtonClick(e)
);
@@ -185,6 +196,11 @@ class PostUploadView extends events.EventTarget {
this._evtFormSubmit(e)
);
this._formNode.classList.add("inactive");
+
+ if (this._tagInputNode) {
+ this._tagControl = new TagInputControl(
+ this._tagInputNode, new TagList(), "Type common tags…");
+ }
}
enableForm() {
@@ -224,6 +240,7 @@ class PostUploadView extends events.EventTarget {
this._formNode.classList.remove("inactive");
let duplicatesFound = 0;
for (let uploadable of uploadables) {
+ uploadable.safety = this._ctx.defaultSafety || uploadable.safety;
if (this._uploadables.find(uploadable) !== -1) {
duplicatesFound++;
continue;
@@ -277,6 +294,15 @@ class PostUploadView extends events.EventTarget {
this.addUploadables(e.detail.urls.map((url) => new Url(url)));
}
+ _evtSkipDuplicatesCheck(e, checked) {
+ if (checked) {
+ this._copyTagsToOriginalsSpanNode.hidden = false;
+ } else {
+ this._copyTagsToOriginalsCheckboxNode.checked = false;
+ this._copyTagsToOriginalsSpanNode.hidden = true;
+ }
+ }
+
_evtCancelButtonClick(e) {
e.preventDefault();
this._emit("cancel");
@@ -307,17 +333,27 @@ class PostUploadView extends events.EventTarget {
}
uploadable.tags = [];
+ if (this._tagControl) {
+ uploadable.tags = this._tagControl.tags.map(tag => tag.names[0]);
+ }
+
uploadable.relations = [];
for (let [i, lookalike] of uploadable.lookalikes.entries()) {
let lookalikeNode = rowNode.querySelector(
`.lookalikes li:nth-child(${i + 1})`
);
- if (lookalikeNode.querySelector("[name=copy-tags]").checked) {
- uploadable.tags = uploadable.tags.concat(
- lookalike.post.tagNames
- );
+ if ((lookalikeNode.querySelector("[name=copy-tags]") || "").checked) {
+ if (lookalike.distance === 0.0) {
+ // found exact match, copy tags to it instead
+ uploadable.foundOriginal = lookalike.post;
+ } else {
+ uploadable.tags = uploadable.tags.concat(
+ lookalike.post.tagNames
+ );
+ uploadable.foundOriginal = undefined;
+ }
}
- if (lookalikeNode.querySelector("[name=add-relation]").checked) {
+ if ((lookalikeNode.querySelector("[name=add-relation]") || "").checked) {
uploadable.relations.push(lookalike.post.id);
}
}
@@ -362,6 +398,8 @@ class PostUploadView extends events.EventTarget {
detail: {
uploadables: this._uploadables,
skipDuplicates: this._skipDuplicatesCheckboxNode.checked,
+ copyTagsToOriginals:
+ this._copyTagsToOriginalsCheckboxNode.checked,
alwaysUploadSimilar:
this._alwaysUploadSimilarCheckboxNode.checked,
pauseRemainOnError:
@@ -429,6 +467,14 @@ class PostUploadView extends events.EventTarget {
return this._hostNode.querySelector("form [name=skip-duplicates]");
}
+ get _copyTagsToOriginalsSpanNode() {
+ return this._hostNode.querySelector(".copy-tags-to-originals");
+ }
+
+ get _copyTagsToOriginalsCheckboxNode() {
+ return this._hostNode.querySelector("form [name=copy-tags-to-originals]");
+ }
+
get _alwaysUploadSimilarCheckboxNode() {
return this._hostNode.querySelector(
"form [name=always-upload-similar]"
@@ -452,6 +498,10 @@ class PostUploadView extends events.EventTarget {
get _contentInputNode() {
return this._formNode.querySelector(".dropper-container");
}
+
+ get _tagInputNode() {
+ return this._formNode.querySelector(".tags input");
+ }
}
module.exports = PostUploadView;