Merge d120f00fb5
into 61b9f81e39
This commit is contained in:
commit
a78a0e6ec5
5 changed files with 108 additions and 44 deletions
|
@ -19,7 +19,7 @@
|
|||
font-size: 1em
|
||||
color: $inactive-link-color
|
||||
float: right
|
||||
line-height: 2em
|
||||
line-height: 2rem
|
||||
.expander-content
|
||||
padding: 0.5em 0.5em 2em 0.5em
|
||||
|
||||
|
|
|
@ -15,13 +15,22 @@ $cancel-button-color = tomato
|
|||
&.inactive .skip-duplicates
|
||||
&.inactive .always-upload-similar
|
||||
&.inactive .pause-remain-on-error
|
||||
&.inactive .upload-all-anonymous
|
||||
&.inactive .expander
|
||||
&.inactive #common-tags,
|
||||
&.uploading input[type=submit],
|
||||
&.uploading .skip-duplicates,
|
||||
&.uploading .always-upload-similar
|
||||
&.uploading .pause-remain-on-error
|
||||
&.uploading .upload-all-anonymous
|
||||
&.uploading .expander
|
||||
&:not(.uploading) .cancel
|
||||
display: none
|
||||
|
||||
&.inactive .control-strip
|
||||
&.uploading .control-strip
|
||||
gap: 0
|
||||
|
||||
.dropper-container
|
||||
margin: 0 auto
|
||||
.file-dropper
|
||||
|
@ -30,28 +39,36 @@ $cancel-button-color = tomato
|
|||
small
|
||||
font-size: 60%
|
||||
|
||||
input[type=submit]
|
||||
margin-top: 1em
|
||||
.expander
|
||||
&.collapsed
|
||||
margin-bottom: 0
|
||||
.expander-content
|
||||
padding: 0.5em
|
||||
|
||||
.cancel
|
||||
margin-top: 1em
|
||||
background: $cancel-button-color
|
||||
border-color: $cancel-button-color
|
||||
&:focus
|
||||
border: 2px solid $text-color
|
||||
|
||||
.skip-duplicates
|
||||
margin-left: 1em
|
||||
|
||||
.always-upload-similar
|
||||
margin-left: 1em
|
||||
|
||||
.pause-remain-on-error
|
||||
margin-left: 1em
|
||||
|
||||
form>.messages
|
||||
margin-top: 1em
|
||||
|
||||
.control-strip
|
||||
display: flex
|
||||
flex-direction: column
|
||||
gap: 1em
|
||||
margin-top: 1em
|
||||
|
||||
.control-options
|
||||
display: flex
|
||||
flex-wrap: wrap
|
||||
gap: 0 1em
|
||||
|
||||
span
|
||||
flex: 1 1 30%
|
||||
white-space: nowrap
|
||||
|
||||
.uploadables-container
|
||||
list-style-type: none
|
||||
margin: 0
|
||||
|
|
|
@ -3,32 +3,45 @@
|
|||
<div class='dropper-container'></div>
|
||||
|
||||
<div class='control-strip'>
|
||||
<div class='control-options'>
|
||||
<span class='skip-duplicates'>
|
||||
<%= ctx.makeCheckbox({
|
||||
text: 'Skip duplicate',
|
||||
name: 'skip-duplicates',
|
||||
checked: false,
|
||||
}) %>
|
||||
</span>
|
||||
|
||||
<span class='always-upload-similar'>
|
||||
<%= ctx.makeCheckbox({
|
||||
text: 'Force upload similar',
|
||||
name: 'always-upload-similar',
|
||||
checked: false,
|
||||
}) %>
|
||||
</span>
|
||||
|
||||
<span class='pause-remain-on-error'>
|
||||
<%= ctx.makeCheckbox({
|
||||
text: 'Pause on error',
|
||||
name: 'pause-remain-on-error',
|
||||
checked: true,
|
||||
}) %>
|
||||
</span>
|
||||
|
||||
<span class='upload-all-anonymous'>
|
||||
<%= ctx.makeCheckbox({
|
||||
text: 'Upload anonymously',
|
||||
name: 'upload-all-anonymous',
|
||||
checked: false,
|
||||
}) %>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<section class='common-tags'>
|
||||
<%= ctx.makeTextInput({name: 'common-tags'}) %>
|
||||
</section>
|
||||
|
||||
<input type='submit' value='Upload all' class='submit'/>
|
||||
|
||||
<span class='skip-duplicates'>
|
||||
<%= ctx.makeCheckbox({
|
||||
text: 'Skip duplicate',
|
||||
name: 'skip-duplicates',
|
||||
checked: false,
|
||||
}) %>
|
||||
</span>
|
||||
|
||||
<span class='always-upload-similar'>
|
||||
<%= ctx.makeCheckbox({
|
||||
text: 'Force upload similar',
|
||||
name: 'always-upload-similar',
|
||||
checked: false,
|
||||
}) %>
|
||||
</span>
|
||||
|
||||
<span class='pause-remain-on-error'>
|
||||
<%= ctx.makeCheckbox({
|
||||
text: 'Pause on error',
|
||||
name: 'pause-remain-on-error',
|
||||
checked: true,
|
||||
}) %>
|
||||
</span>
|
||||
|
||||
<input type='button' value='Cancel' class='cancel'/>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ function makeCheckbox(options) {
|
|||
name: options.name,
|
||||
value: options.value,
|
||||
type: "checkbox",
|
||||
checked: options.checked !== undefined ? options.checked : false,
|
||||
checked: options.checked !== undefined && options.checked !== null ? options.checked : false,
|
||||
disabled: options.readonly,
|
||||
required: options.required,
|
||||
}),
|
||||
|
|
|
@ -4,10 +4,14 @@ 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 ExpanderControl = require("../controls/expander_control.js");
|
||||
const TagInputControl = require("../controls/tag_input_control.js");
|
||||
|
||||
const template = views.getTemplate("post-upload");
|
||||
const rowTemplate = views.getTemplate("post-upload-row");
|
||||
|
||||
const TagList = require("../models/tag_list.js");
|
||||
|
||||
function _mimeTypeToPostType(mimeType) {
|
||||
return (
|
||||
{
|
||||
|
@ -160,6 +164,7 @@ class PostUploadView extends events.EventTarget {
|
|||
this._uploadables.find = (u) => {
|
||||
return this._uploadables.findIndex((u2) => u.key === u2.key);
|
||||
};
|
||||
this._commonTags = new TagList();
|
||||
|
||||
this._contentFileDropper = new FileDropperControl(
|
||||
this._contentInputNode,
|
||||
|
@ -185,6 +190,23 @@ class PostUploadView extends events.EventTarget {
|
|||
this._evtFormSubmit(e)
|
||||
);
|
||||
this._formNode.classList.add("inactive");
|
||||
|
||||
this._commonTagsExpander = new ExpanderControl(
|
||||
"common-tags",
|
||||
"Common Tags (0)",
|
||||
this._hostNode.querySelectorAll(".common-tags")
|
||||
);
|
||||
|
||||
if (this._commonTagsInputNode) {
|
||||
this._commonTagsControl = new TagInputControl(
|
||||
this._commonTagsInputNode,
|
||||
this._commonTags
|
||||
);
|
||||
|
||||
this._commonTagsControl.addEventListener("change", (_) => {
|
||||
this._commonTagsExpander.title = `Common Tags (${this._commonTags.length})`;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
enableForm() {
|
||||
|
@ -299,14 +321,16 @@ class PostUploadView extends events.EventTarget {
|
|||
uploadable.safety = safetyNode.value;
|
||||
}
|
||||
|
||||
const anonymousNode = rowNode.querySelector(
|
||||
".anonymous input:checked"
|
||||
);
|
||||
if (anonymousNode) {
|
||||
uploadable.anonymous = true;
|
||||
let anonymous = this._uploadAllAnonymous.checked;
|
||||
if (!anonymous && rowNode.querySelector(".anonymous input:checked")) {
|
||||
anonymous = true;
|
||||
}
|
||||
uploadable.anonymous = anonymous;
|
||||
|
||||
uploadable.tags = [];
|
||||
if (this._commonTagsInputNode) {
|
||||
uploadable.tags = this._commonTags.map((tag) => tag.names[0]);
|
||||
}
|
||||
uploadable.relations = [];
|
||||
for (let [i, lookalike] of uploadable.lookalikes.entries()) {
|
||||
let lookalikeNode = rowNode.querySelector(
|
||||
|
@ -441,6 +465,12 @@ class PostUploadView extends events.EventTarget {
|
|||
);
|
||||
}
|
||||
|
||||
get _uploadAllAnonymous() {
|
||||
return this._hostNode.querySelector(
|
||||
"form [name=upload-all-anonymous]"
|
||||
);
|
||||
}
|
||||
|
||||
get _submitButtonNode() {
|
||||
return this._hostNode.querySelector("form [type=submit]");
|
||||
}
|
||||
|
@ -452,6 +482,10 @@ class PostUploadView extends events.EventTarget {
|
|||
get _contentInputNode() {
|
||||
return this._formNode.querySelector(".dropper-container");
|
||||
}
|
||||
|
||||
get _commonTagsInputNode() {
|
||||
return this._formNode.querySelector(".common-tags input");
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = PostUploadView;
|
||||
|
|
Reference in a new issue