DEV: cook grid bbcode in chat (#29658)

This change will only prevent a cooked message with [grid] to show [grid] instead the content will be wrapped in `div class="d-image-grid"`. This is only enabled on messages made by bot, as regular users could use grid but have no reason to use it ATM. It will also not apply the decoration which shouldn't change the behavior more than just remove grid markup from the message
This commit is contained in:
Joffrey JAFFEUX 2024-11-08 14:43:28 +09:00 committed by GitHub
parent af642d0d69
commit 032b1f871b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 25 additions and 3 deletions

View File

@ -223,8 +223,13 @@ module Chat
]
def self.cook(message, opts = {})
bot = opts[:user_id] && opts[:user_id].negative?
features = MARKDOWN_FEATURES.dup
features << "image-grid" if bot
rules = MARKDOWN_IT_RULES.dup
rules << "heading" if opts[:user_id] && opts[:user_id].negative?
rules << "heading" if bot
# A rule in our Markdown pipeline may have Guardian checks that require a
# user to be present. The last editing user of the message will be more
@ -235,8 +240,7 @@ module Chat
cooked =
PrettyText.cook(
message,
features_override:
MARKDOWN_FEATURES + DiscoursePluginRegistry.chat_markdown_features.to_a,
features_override: features + DiscoursePluginRegistry.chat_markdown_features.to_a,
markdown_it_rules: rules,
force_quote_link: true,
user_id: opts[:user_id],

View File

@ -99,6 +99,16 @@ describe Chat::Message do
<h6><a name="h6-6" class="anchor" href="#h6-6"></a>h6</h6>
HTML
end
it "cooks the grid bbcode" do
cooked = described_class.cook("[grid]\ntest\n[/grid]", user_id: -1)
expect(cooked).to match_html <<~HTML
<div class="d-image-grid">
<p>test</p>
</div>
HTML
end
end
it "doesn't support headings" do
@ -109,6 +119,14 @@ describe Chat::Message do
HTML
end
it "doesn't support grid" do
cooked = described_class.cook("[grid]\ntest\n[/grid]")
expect(cooked).to match_html <<~HTML
<p>[grid]<br>test<br>[/grid]</p>
HTML
end
it "supports horizontal replacement" do
cooked = described_class.cook("---")