mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 08:49:06 +08:00
FEATURE: Use configured quotation marks in fancy topic title
This commit is contained in:
parent
8f89254554
commit
ce8e099639
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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+.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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('„Weißt du“, sagte er, „was ‚Discourse‘ ist?“')
|
||||
|
||||
SiteSetting.markdown_typographer_quotation_marks = "«\u00A0|\u00A0»|‹\u00A0|\u00A0›"
|
||||
topic.title = '"Qui vivra verra"'
|
||||
expect(topic.fancy_title).to eq('« Qui vivra verra »')
|
||||
end
|
||||
|
||||
context 'readonly mode' do
|
||||
before do
|
||||
Discourse.enable_readonly_mode
|
||||
|
|
Loading…
Reference in New Issue
Block a user