diff options
Diffstat (limited to 'client/js/views/post_upload_view.js')
| -rw-r--r-- | client/js/views/post_upload_view.js | 60 |
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; |