Merge branch 'master' of github.com:zwagoth/e621ng

This commit is contained in:
Kira 2021-09-22 21:57:36 -07:00
commit cc73dec83d
13 changed files with 44 additions and 54 deletions

View File

@ -34,7 +34,7 @@ export { default as Blip } from '../src/javascripts/blips.js';
export { default as Comment } from '../src/javascripts/comments.js'; export { default as Comment } from '../src/javascripts/comments.js';
export { default as Dtext } from '../src/javascripts/dtext.js'; export { default as Dtext } from '../src/javascripts/dtext.js';
export { default as Note } from '../src/javascripts/notes.js'; export { default as Note } from '../src/javascripts/notes.js';
export { default as Post } from '../src/javascripts/posts.js.erb'; export { default as Post } from '../src/javascripts/posts.js';
export { default as PostModeMenu } from '../src/javascripts/post_mode_menu.js'; export { default as PostModeMenu } from '../src/javascripts/post_mode_menu.js';
export { default as PostVersions } from '../src/javascripts/post_versions.js'; export { default as PostVersions } from '../src/javascripts/post_versions.js';
export { default as RelatedTag } from '../src/javascripts/related_tag.js'; export { default as RelatedTag } from '../src/javascripts/related_tag.js';

View File

@ -1,4 +1,4 @@
import Post from './posts.js.erb' import Post from './posts'
import Utility from './utility' import Utility from './utility'
import {SendQueue} from './send_queue' import {SendQueue} from './send_queue'
@ -69,4 +69,3 @@ Favorite.destroy = function (post_id) {
$(Favorite.initialize_actions); $(Favorite.initialize_actions);
export default Favorite export default Favorite

View File

@ -1,5 +1,5 @@
import Utility from './utility' import Utility from './utility'
import Post from './posts.js.erb' import Post from './posts'
let ModQueue = {}; let ModQueue = {};

View File

@ -1,6 +1,6 @@
import Utility from './utility' import Utility from './utility'
import LS from './local_storage' import LS from './local_storage'
import Post from './posts.js.erb' import Post from './posts'
import Favorite from './favorites' import Favorite from './favorites'
import PostSet from './post_sets' import PostSet from './post_sets'
import TagScript from './tag_script' import TagScript from './tag_script'

View File

@ -1,5 +1,5 @@
import {SendQueue} from './send_queue' import {SendQueue} from './send_queue'
import Post from './posts.js.erb' import Post from './posts'
import LS from './local_storage' import LS from './local_storage'
let PostSet = {}; let PostSet = {};

View File

@ -1,6 +1,6 @@
import Utility from './utility'; import Utility from './utility';
import {SendQueue} from "./send_queue"; import {SendQueue} from "./send_queue";
import Post from './posts.js.erb'; import Post from './posts';
let PostVersion = {}; let PostVersion = {};

View File

@ -579,7 +579,9 @@ Post.resize_image = function (post, target_size) {
Post.resize_notes(); Post.resize_notes();
} }
Post.resize_to_internal = function(target_size) { Post.resize_to = function(target_size) {
target_size = update_size_selector(target_size);
if ($("#image-container").hasClass("blacklisted-active-visible")) if ($("#image-container").hasClass("blacklisted-active-visible"))
return; return;
@ -591,14 +593,6 @@ Post.resize_to_internal = function(target_size) {
} }
} }
Post.resize_to = function (target_size) {
if ($("#image-container").hasClass("blacklisted-active-visible"))
return;
const selector = $("#image-resize-selector");
select_or_fit(selector, target_size);
Post.resize_to_internal(selector.val());
}
function is_video(post) { function is_video(post) {
switch (post.file.ext) { switch (post.file.ext) {
@ -610,29 +604,28 @@ function is_video(post) {
} }
} }
function sorted_samples() { function update_size_selector(choice) {
let samples = Object.entries(Post.currentPost().sample.alternates); const selector = $("#image-resize-selector");
samples = samples.filter((x) => x[0] !== 'original'); const choices = selector.find("option");
return samples.sort((a, b) => (a[1].height * a[1].width) > (b[1].height * b[1].width) ? -1 : 1);
}
function select_or_fit(parent, choice) {
const choices = parent.find("option");
if(choice === "next") { if(choice === "next") {
const index = parent[0].selectedIndex; const index = selector[0].selectedIndex;
parent.val($(choices[(index+1) % choices.length]).val()); const next_choice = $(choices[(index + 1) % choices.length]).val();
return; selector.val(next_choice);
return next_choice;
} }
for (const item of choices) { for (const item of choices) {
if ($(item).val() == choice) { if ($(item).val() == choice) {
parent.val(choice); selector.val(choice);
return; return choice;
} }
} }
parent.val('fit'); selector.val("fit");
return "fit";
} }
function most_relevant_sample_size(post) { function most_relevant_sample_size(post) {
const samples = sorted_samples(); let samples = Object.entries(Post.currentPost().sample.alternates);
samples = samples.filter((x) => x[0] !== 'original');
if(samples.length === 0) { if(samples.length === 0) {
return 'fit'; return 'fit';
} }
@ -643,19 +636,6 @@ function most_relevant_sample_size(post) {
return differences[0][0]; return differences[0][0];
} }
function fill_size_options(has_sample) {
const $sel = $("#image-resize-selector").empty();
$sel.append($("<option>").val("original").text("Original"));
$sel.append($("<option>").val("fit").text("Fit (Horizontal)"));
$sel.append($("<option>").val("fitv").text("Fit (Vertical)"));
if(has_sample)
$sel.append($("<option>").val("large").text("Sample (800)"));
for (const sample of sorted_samples()) {
$sel.append($("<option>").val(sample[0]).text(`Sample (${sample[0]})`));
}
}
Post.initialize_resize = function () { Post.initialize_resize = function () {
Post.initialize_change_resize_mode_link(); Post.initialize_change_resize_mode_link();
const post = Post.currentPost(); const post = Post.currentPost();
@ -663,9 +643,6 @@ Post.initialize_resize = function () {
return; return;
const is_post_video = is_video(post); const is_post_video = is_video(post);
const $selector = $("#image-resize-selector");
fill_size_options(!is_post_video && post?.sample?.has);
if (!is_post_video) { if (!is_post_video) {
const $image = $('img#image'); const $image = $('img#image');
if ($image.length > 0 && $image[0]) { if ($image.length > 0 && $image[0]) {
@ -684,7 +661,8 @@ Post.initialize_resize = function () {
image_size = most_relevant_sample_size(post); image_size = most_relevant_sample_size(post);
} }
Post.resize_to(image_size); Post.resize_to(image_size);
$selector.on('change', () => Post.resize_to_internal($selector.val())); const $selector = $("#image-resize-selector");
$selector.on('change', () => Post.resize_to($selector.val()));
} }
Post.resize_cycle_mode = function(e) { Post.resize_cycle_mode = function(e) {

View File

@ -1,5 +1,5 @@
import Utility from './utility'; import Utility from './utility';
import Post from './posts.js.erb'; import Post from './posts';
let RelatedTag = {}; let RelatedTag = {};

View File

@ -30,7 +30,7 @@
import Vue from 'vue'; import Vue from 'vue';
import relatedTags from './uploader_related.vue'; import relatedTags from './uploader_related.vue';
import tagPreview from './uploader_preview.vue'; import tagPreview from './uploader_preview.vue';
import Post from './posts.js.erb'; import Post from './posts';
import Autocomplete from "./autocomplete.js.erb"; import Autocomplete from "./autocomplete.js.erb";
import Utility from "./utility.js"; import Utility from "./utility.js";

View File

@ -1,4 +1,4 @@
import Post from './posts.js.erb' import Post from './posts'
let Upload = {}; let Upload = {};

View File

@ -108,7 +108,18 @@
<% end %> <% end %>
<% if !@post.force_original_size?(params[:original]) %> <% if !@post.force_original_size?(params[:original]) %>
<div> <div>
| <select id="image-resize-selector" class="button btn-neutral"><option>(Disabled: No JS)</option></select> | <select id="image-resize-selector" class="button btn-neutral">
<option value="original">Original</option>
<option value="fit">Fit (Horizontal)</option>
<option value="fitv">Fit (Vertical)</option>
<% if !@post.is_video? %>
<option value="large">Sample (<%= Danbooru.config.large_image_width %>px)</option>
<% end %>
<% Danbooru.config.video_rescales.keys.each do |size| %>
<% next unless @post.has_sample_size?(size) %>
<option value="<%= size %>">Sample (<%= size %>)</option>
<% end %>
</select>
</div> </div>
<% end %> <% end %>
</section> </section>

View File

@ -44,7 +44,7 @@
<%= f.input :comment_threshold, :hint => "Comments below this score will be hidden by default." %> <%= f.input :comment_threshold, :hint => "Comments below this score will be hidden by default." %>
<%= f.input :default_image_size, :hint => "Show original image size, scaled to fit, scaled to fit vertically, or show resized #{Danbooru.config.large_image_width} pixel sample version.", :label => "Default image width", :collection => [["850px", "large"], ["scale to fit", "fit"], ["scale to fit vertically", "fitv"], ["original", "original"]], :include_blank => false %> <%= f.input :default_image_size, :hint => "Show original image size, scaled to fit, scaled to fit vertically, or show resized #{Danbooru.config.large_image_width} pixel sample version.", :label => "Default image width", :collection => [["Original", "original"], ["Fit (Horizonal)", "fit"], ["Fit (Vertical)", "fitv"], ["Sample (#{Danbooru.config.large_image_width}px)", "large"]], :include_blank => false %>
<%= f.input :per_page, :label => "Posts per page", :as => :select, :collection => (25..250), :include_blank => false %> <%= f.input :per_page, :label => "Posts per page", :as => :select, :collection => (25..250), :include_blank => false %>

View File

@ -954,8 +954,10 @@ fart'
false false
end end
# Additional video samples will be generated in these dimensions if it makes sense to do so
# They will be available as additional scale options on applicable posts in the order they appear here
def video_rescales def video_rescales
{'480p' => [640, 480], '720p' => [1280, 720]} {'720p' => [1280, 720], '480p' => [640, 480]}
end end
def image_rescales def image_rescales