Add tag_pair to support safe_format and avoid html_safe calls
What does this MR do and why?
This MR implements a new helper method tag_pair
from #374091 (comment 1397321824).
Currently, we need to use .html_safe
for tags passed to safe_format
. This doesn't play well with Prohibit calling .html_safe in views (#408826).
# Before
safe_format(s_('Preferences|When you type in a description or comment box, pressing %{kbdOpen}Enter%{kbdClose} in a list adds a new item below.'), kbdOpen: '<kbd>'.html_safe, kbdClose: '</kbd>'.html_safe)
safe_format(_('You have set up 2FA for your account! If you lose access to your 2FA device, you can use your recovery codes to access your account. Alternatively, if you upload an SSH key, you can %{anchorOpen}use that key to generate additional recovery codes%{anchorClose}.'), anchorOpen: '<a href="%{href}">'.html_safe % { href: help_page_path('user/profile/account/two_factor_authentication', anchor: 'generate-new-recovery-codes-using-ssh') }, anchorClose: '</a>'.html_safe)
We could get rid of .html_safe
by using Rails' tag.X
helper and adding a String
method tag_pair(open_tag, close_tag)
which returns a Hash
containing "html safe" open and close tags:
# After
safe_format(s_('Preferences|When you type in a description or comment box, pressing %{kbdOpen}Enter%{kbdClose} in a list adds a new item below.'), tag.kbd.tag_pair(:kbdOpen, :kbdClose))
link = link_to('', help_page_path('user/profile/account/two_factor_authentication', anchor: 'generate-new-recovery-codes-using-ssh'))
safe_format(_('You have set up 2FA for your account! If you lose access to your 2FA device, you can use your recovery codes to access your account. Alternatively, if you upload an SSH key, you can %{anchorOpen}use that key to generate additional recovery codes%{anchorClose}.'), tag_pair(link, :anchorOpen, :anchorClose))
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Edited by Peter Leitzen