FEATURE: Use configured quotation marks in fancy topic title

This commit is contained in:
Gerhard Schlager 2019-07-12 21:09:57 +02:00
parent 8f89254554
commit ce8e099639
5 changed files with 50 additions and 3 deletions

View File

@ -3,6 +3,7 @@
require 'site_setting_extension'
require_dependency 'global_path'
require_dependency 'site_settings/yaml_loader'
require 'htmlentities'
class SiteSetting < ActiveRecord::Base
extend GlobalPath
@ -122,6 +123,7 @@ class SiteSetting < ActiveRecord::Base
@attachment_content_type_blacklist_regex = nil
@attachment_filename_blacklist_regex = nil
@unicode_username_whitelist_regex = nil
@pretty_quote_entities = nil
end
def self.attachment_content_type_blacklist_regex
@ -137,6 +139,22 @@ class SiteSetting < ActiveRecord::Base
? Regexp.new(SiteSetting.unicode_username_character_whitelist) : nil
end
def self.pretty_quote_entities
@pretty_quote_entities ||= begin
htmlentities = HTMLEntities.new
quotation_marks = SiteSetting.markdown_typographer_quotation_marks
.split("|")
.map { |quote| htmlentities.encode(quote, :basic, :named, :decimal) }
{
double_left_quote: quotation_marks[0],
double_right_quote: quotation_marks[1],
single_left_quote: quotation_marks[2],
single_right_quote: quotation_marks[3]
}
end
end
# helpers for getting s3 settings that fallback to global
class Upload
def self.s3_cdn_url

View File

@ -336,7 +336,7 @@ class Topic < ActiveRecord::Base
def self.fancy_title(title)
return unless escaped = ERB::Util.html_escape(title)
fancy_title = Emoji.unicode_unescape(HtmlPrettify.render(escaped))
fancy_title = Emoji.unicode_unescape(HtmlPrettify.render(escaped, SiteSetting.pretty_quote_entities))
fancy_title.length > Topic.max_fancy_title_length ? escaped : fancy_title
end

View File

@ -10,8 +10,8 @@
#
class HtmlPrettify < String
def self.render(html)
new(html).to_html
def self.render(html, entities = {})
new(html, [2], entities).to_html
end
# Create a new RubyPants instance with the text in +string+.

View File

@ -83,6 +83,25 @@ task "topics:watch_all_replied_topics" => :environment do
puts "", "Done"
end
task "topics:update_fancy_titles" => :environment do
if !SiteSetting.title_fancy_entities?
puts "fancy topic titles are disabled"
return
end
DB.exec("UPDATE topics SET fancy_title = NULL")
total = Topic.count
count = 0
Topic.find_each do |topic|
topic.fancy_title
print_status(count += 1, total)
end
puts "", "Done"
end
def print_status(current, max)
print "\r%9d / %d (%5.1f%%)" % [current, max, ((current.to_f / max.to_f) * 100).round(1)]
end

View File

@ -390,6 +390,16 @@ describe Topic do
expect(topic.fancy_title).to eq(long_title)
end
it "uses the configured quote entities" do
SiteSetting.markdown_typographer_quotation_marks = "„|“||"
topic.title = %q|"Weißt du", sagte er, "was 'Discourse' ist?"|
expect(topic.fancy_title).to eq('&bdquo;Weißt du&ldquo;, sagte er, &bdquo;was &sbquo;Discourse&lsquo; ist?&ldquo;')
SiteSetting.markdown_typographer_quotation_marks = "«\u00A0|\u00A0»|\u00A0|\u00A0"
topic.title = '"Qui vivra verra"'
expect(topic.fancy_title).to eq('&laquo;&nbsp;Qui vivra verra&nbsp;&raquo;')
end
context 'readonly mode' do
before do
Discourse.enable_readonly_mode