diff --git a/app/models/post.rb b/app/models/post.rb index db5d26e12..db3bc8659 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -99,17 +99,31 @@ class Post < ActiveRecord::Base end def file_url - "/data/#{file_path_prefix}#{md5}.#{file_ext}" + if Danbooru.config.enable_seo_post_urls + # the seo tags should be stripped out by nginx + "/data/--#{seo_tags}--#{file_path_prefix}#{md5}.#{file_ext}" + else + "/data/#{file_path_prefix}#{md5}.#{file_ext}" + end end def large_file_url if has_large? - "/data/sample/#{file_path_prefix}#{Danbooru.config.large_image_prefix}#{md5}.#{large_file_ext}" + if Danbooru.config.enable_seo_post_urls + # the seo tags should be stripped out by nginx + "/data/sample/--#{seo_tags}--#{file_path_prefix}#{Danbooru.config.large_image_prefix}#{md5}.#{large_file_ext}" + else + "/data/sample/#{file_path_prefix}#{Danbooru.config.large_image_prefix}#{md5}.#{large_file_ext}" + end else file_url end end + def seo_tags + @seo_tags ||= humanized_essential_tag_string.gsub(/[^a-z0-9]+/, "-").gsub(/(^-+)|(-+$)/, "") + end + def preview_file_url if !has_preview? return "/images/download-preview.png" @@ -778,26 +792,37 @@ class Post < ActiveRecord::Base end end - def essential_tag_string - tag_array.each do |tag| - if tag_categories[tag] == Danbooru.config.tag_category_mapping["copyright"] - return tag - end - end + def humanized_essential_tag_string + @humanized_essential_tag_string ||= begin + string = [] - tag_array.each do |tag| - if tag_categories[tag] == Danbooru.config.tag_category_mapping["character"] - return tag + if character_tags.any? + chartags = character_tags.slice(0, 5) + if character_tags.length > 5 + chartags << "others" + end + chartags = chartags.map do |tag| + tag.match(/^(.+?)(?:_\(.+\))?$/)[1] + end + string << chartags.to_sentence end - end - tag_array.each do |tag| - if tag_categories[tag] == Danbooru.config.tag_category_mapping["artist"] - return tag + if copyright_tags.any? + copytags = copyright_tags.slice(0, 5) + if copyright_tags.length > 5 + copytags << "others" + end + copytags = copytags.to_sentence + string << (character_tags.any? ? "(#{copytags})" : copytags) end - end - return tag_array.first + if artist_tags_excluding_hidden.any? + string << "drawn by" + string << artist_tags_excluding_hidden.to_sentence + end + + string.empty? ? "##{id}" : string.join(" ").tr("_", " ") + end end def tag_string_copyright diff --git a/app/presenters/post_presenter.rb b/app/presenters/post_presenter.rb index 1f5093d03..347768bb2 100644 --- a/app/presenters/post_presenter.rb +++ b/app/presenters/post_presenter.rb @@ -104,34 +104,7 @@ class PostPresenter < Presenter end def humanized_essential_tag_string - string = [] - - if @post.character_tags.any? - chartags = @post.character_tags.slice(0, 5) - if @post.character_tags.length > 5 - chartags << "others" - end - chartags = chartags.map do |tag| - tag.match(/^(.+?)(?:_\(.+\))?$/)[1] - end - string << chartags.to_sentence - end - - if @post.copyright_tags.any? - copytags = @post.copyright_tags.slice(0, 5) - if @post.copyright_tags.length > 5 - copytags << "others" - end - copytags = copytags.to_sentence - string << (@post.character_tags.any? ? "(#{copytags})" : copytags) - end - - if @post.artist_tags_excluding_hidden.any? - string << "drawn by" - string << @post.artist_tags_excluding_hidden.to_sentence - end - - string.empty? ? "##{@post.id}" : string.join(" ").tr("_", " ") + @post.humanized_essential_tag_string end def categorized_tag_string diff --git a/config/danbooru_default_config.rb b/config/danbooru_default_config.rb index 23ad14ddc..e5e002d9f 100644 --- a/config/danbooru_default_config.rb +++ b/config/danbooru_default_config.rb @@ -396,6 +396,10 @@ module Danbooru def addthis_key end + def enable_seo_post_urls + false + end + # enable some (donmai-specific) optimizations for post counts def estimate_post_counts true