Files
danbooru/app/assets/javascripts/uploads.js
evazion cf27de2ec9 Fix #3532: Make Enter key accept current tag during autocomplete.
Previously we patched the jqueryui-autocomplete library in order to
customize how the Tab and Enter keys behaved. Specifically, we wanted to
prevent the Tab key from moving the focus out of the tag input box, and
we wanted to prevent the Enter key from submitting the page when editing tags.

These things can achieved without patching the library by using
`event.preventDefault` and `event.stopImmediatePropagation` to prevent
other event handlers from running after these keys trigger the
`autocompleteselect` event.
2018-02-06 19:11:01 -06:00

195 lines
6.3 KiB
JavaScript

(function() {
Danbooru.Upload = {};
Danbooru.Upload.initialize_all = function() {
if ($("#c-uploads,#c-posts").length) {
this.initialize_enter_on_tags();
this.initialize_info_manual();
}
if ($("#c-uploads").length) {
$("#image").load(this.initialize_image);
this.initialize_info_bookmarklet();
this.initialize_similar();
this.initialize_shortcuts();
this.initialize_submit();
$("#related-tags-button").trigger("click");
$("#toggle-artist-commentary").click(function(e) {
Danbooru.Upload.toggle_commentary();
e.preventDefault();
});
}
if ($("#iqdb-similar").length) {
this.initialize_iqdb_source();
}
}
Danbooru.Upload.initialize_submit = function() {
$("#form").submit(function(e) {
var error_messages = [];
if (($("#upload_file").val() === "") && ($("#upload_source").val() === "")) {
error_messages.push("Must choose file or specify source");
}
if (!$("#upload_rating_s")[0].checked && !$("#upload_rating_q")[0].checked && !$("#upload_rating_e")[0].checked &&
($("#upload_tag_string").val().search(/\brating:[sqe]/i) < 0)) {
error_messages.push("Must specify a rating");
}
if (error_messages.length === 0) {
$("#submit-button")[0].setAttribute("disabled","true");
$("#submit-button")[0].setAttribute("value","Submitting...");
$("#client-errors").hide();
} else {
$("#client-errors")[0].innerHTML = "<strong>Error</strong>: " + error_messages.join(", ");
$("#client-errors").show();
e.preventDefault();
}
});
}
Danbooru.Upload.initialize_shortcuts = function() {
Danbooru.keydown("e", "edit", function(e) {
$("#upload_tag_string").focus();
e.preventDefault();
});
};
Danbooru.Upload.initialize_iqdb_source = function() {
if (/^https?:\/\//.test($("#normalized_url").val())) {
$.post("/iqdb_queries", {"url": $("#normalized_url").val()}).done(function(html) {$("#iqdb-similar").html(html)});
}
}
Danbooru.Upload.initialize_enter_on_tags = function() {
var $textarea = $("#upload_tag_string, #post_tag_string");
var $submit = $textarea.parents("form").find('input[type="submit"]');
$textarea.on("keydown.danbooru.submit", null, "return", function(e) {
$submit.click();
e.preventDefault();
});
}
Danbooru.Upload.initialize_similar = function() {
$("#similar-button").click(function(e) {
$.post("/iqdb_queries", {"url": $("#upload_source").val()}).done(function(html) {$("#iqdb-similar").html(html).show()});
e.preventDefault();
});
}
Danbooru.Upload.initialize_info_bookmarklet = function() {
$("#upload_source").change(function (e) {
$("#fetch-data-manual").click();
});
$("#fetch-data-manual").click();
}
Danbooru.Upload.initialize_info_manual = function() {
$("#fetch-data-manual").click(function(e) {
var source = $("#upload_source,#post_source").val();
var referer = $("#upload_referer_url").val();
if (/^https?:\/\//.test(source)) {
$("#source-info span#loading-data").show();
Danbooru.Upload.fetch_source_data(source, referer);
}
e.preventDefault();
});
}
Danbooru.Upload.fetch_source_data = function(url, referer_url) {
var xhr = $.getJSON("/source.json", { url: url, ref: referer_url });
xhr.success(Danbooru.Upload.fill_source_info);
xhr.fail(function(data) {
$("#source-info span#loading-data").html("Error: " + data.responseJSON["message"])
});
return xhr;
}
Danbooru.Upload.fill_source_info = function(data) {
$("#source-tags").empty();
$.each(data.tags, function(i, v) {
$("<a>").attr("href", v[1]).text(v[0]).appendTo("#source-tags");
});
$("#source-artist-profile").attr("href", data.profile_url).text(data.artist_name);
Danbooru.RelatedTag.process_artist(data.artists);
Danbooru.RelatedTag.translated_tags = data.translated_tags;
Danbooru.RelatedTag.build_all();
if (data.artists.length === 0) {
var new_artist_params = $.param({
name: data.unique_id,
other_names: data.artist_name,
urls: $.unique([data.profile_url, data.normalized_for_artist_finder_url]).join("\n")
});
var link = $("<a>").attr("href", "/artists/new?" + new_artist_params).text("Create new artist");
$("#source-danbooru-artists").html(link);
} else {
var artistLinks = data.artists.map(function (artist) {
return $('<a class="tag-type-1">').attr("href", "/artists/" + artist.id).text(artist.name);
});
$("#source-danbooru-artists").html(artistLinks)
}
if (data.image_urls.length > 1) {
$("#gallery-warning").show();
} else {
$("#gallery-warning").hide();
}
$("#upload_artist_commentary_title").val(data.artist_commentary.dtext_title);
$("#upload_artist_commentary_desc").val(data.artist_commentary.dtext_description);
Danbooru.Upload.toggle_commentary();
$("#source-info span#loading-data").hide();
$("#source-info ul").show();
}
Danbooru.Upload.update_scale = function() {
var $image = $("#image");
var ratio = $image.data("scale-factor");
if (ratio < 1) {
$("#scale").html("Scaled " + parseInt(100 * ratio) + "% (original: " + $image.data("original-width") + "x" + $image.data("original-height") + ")");
} else {
$("#scale").html("Original: " + $image.data("original-width") + "x" + $image.data("original-height"));
}
}
Danbooru.Upload.initialize_image = function() {
var $image = $("#image");
if ($image.length) {
var width = $image.width();
var height = $image.height();
$image.data("original-width", width);
$image.data("original-height", height);
Danbooru.Post.resize_image_to_window($image);
Danbooru.Post.initialize_post_image_resize_to_window_link();
Danbooru.Upload.update_scale();
$("#image-resize-to-window-link").click(Danbooru.Upload.update_scale);
}
}
Danbooru.Upload.toggle_commentary = function() {
if ($(".artist-commentary").is(":visible")) {
$("#toggle-artist-commentary").text("show »");
} else {
$("#toggle-artist-commentary").text("« hide");
}
$(".artist-commentary").slideToggle();
};
})();
$(function() {
Danbooru.Upload.initialize_all();
});