From fff8bc0c3beb8d537ad1c217aa4c257f3cda6bc7 Mon Sep 17 00:00:00 2001 From: "marius.balteanu" Date: Fri, 25 Feb 2022 00:04:39 +0200 Subject: [PATCH] Render mentioned users with leading @ (#36699, #13919). --- app/helpers/application_helper.rb | 3 ++- public/stylesheets/application.css | 5 +++++ test/helpers/application_helper_test.rb | 14 +++++++------- test/unit/mailer_test.rb | 2 +- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 1d2b09423..1dfa26cb2 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -60,6 +60,7 @@ module ApplicationHelper case principal when User name = h(principal.name(options[:format])) + name = "@" + name if options[:mention] css_classes = '' if principal.active? || (User.current.admin? && principal.logged?) url = user_url(principal, :only_path => only_path) @@ -1265,7 +1266,7 @@ module ApplicationHelper elsif sep == "@" name = remove_double_quotes(identifier) u = User.visible.find_by("LOWER(login) = :s AND type = 'User'", :s => name.downcase) - link = link_to_user(u, :only_path => only_path, :class => 'user-mention') if u + link = link_to_user(u, :only_path => only_path, :class => 'user-mention', :mention => true) if u end end (leading + (link || "#{project_prefix}#{prefix}#{repo_prefix}#{sep}#{identifier}#{comment_suffix}")) diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index f837a710e..8fb563014 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -150,6 +150,11 @@ a img{ border: 0; } a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; } a.project.closed, a.project.closed:link, a.project.closed:visited { color: #999; } a.user.locked, a.user.locked:link, a.user.locked:visited {color: #999;} +a.user.user-mention { + background-color: #DDEEFF; + padding: 0.1em 0.1em; + border-radius: 0.1em; +} #sidebar a.selected {line-height:1.7em; padding:1px 3px 2px 2px; margin-left:-2px; background-color:#9DB9D5; color:#fff; border-radius:2px;} #sidebar a.selected:hover {text-decoration:none;} diff --git a/test/helpers/application_helper_test.rb b/test/helpers/application_helper_test.rb index 20b854cc7..48921c3ef 100644 --- a/test/helpers/application_helper_test.rb +++ b/test/helpers/application_helper_test.rb @@ -562,12 +562,12 @@ class ApplicationHelperTest < Redmine::HelperTest 'user:jsmith' => link_to_user(User.find_by_id(2)), 'user:JSMITH' => link_to_user(User.find_by_id(2)), 'user#2' => link_to_user(User.find_by_id(2)), - '@jsmith' => link_to_user(User.find_by_id(2), class: 'user-mention'), - '@jsmith.' => "#{link_to_user(User.find_by_id(2), class: 'user-mention')}.", - '@JSMITH' => link_to_user(User.find_by_id(2), class: 'user-mention'), - '@abcd@example.com' => link_to_user(User.find_by_id(u_email_id), class: 'user-mention'), + '@jsmith' => link_to_user(User.find_by_id(2), class: 'user-mention', mention: true), + '@jsmith.' => "#{link_to_user(User.find_by_id(2), class: 'user-mention', mention: true)}.", + '@JSMITH' => link_to_user(User.find_by_id(2), class: 'user-mention', mention: true), + '@abcd@example.com' => link_to_user(User.find_by_id(u_email_id), class: 'user-mention', mention: true), 'user:abcd@example.com' => link_to_user(User.find_by_id(u_email_id)), - '@foo.bar@example.com' => link_to_user(User.find_by_id(u_email_id_2), class: 'user-mention'), + '@foo.bar@example.com' => link_to_user(User.find_by_id(u_email_id_2), class: 'user-mention', mention: true), 'user:foo.bar@example.com' => link_to_user(User.find_by_id(u_email_id_2)), # invalid user 'user:foobar' => 'user:foobar', @@ -596,7 +596,7 @@ class ApplicationHelperTest < Redmine::HelperTest # user link format: @jsmith@somenet.foo raw = "@jsmith@somenet.foo should not be parsed in jsmith@somenet.foo" assert_match( - %r{

#{u.name} should not be parsed in #{html}

}, + %r{

@#{u.name} should not be parsed in #{html}

}, textilizable(raw, :project => Project.find(1)) ) # user link format: user:jsmith@somenet.foo @@ -616,7 +616,7 @@ class ApplicationHelperTest < Redmine::HelperTest # user link format: @jsmith@somenet.foo raw = "@jsmith@somenet.foo should not be parsed in jsmith@somenet.foo" assert_match( - %r{

#{u.name} should not be parsed in #{html}

}, + %r{

@#{u.name} should not be parsed in #{html}

}, textilizable(raw, :project => Project.find(1)) ) # user link format: user:jsmith@somenet.foo diff --git a/test/unit/mailer_test.rb b/test/unit/mailer_test.rb index 3e214b47d..b82d570bc 100644 --- a/test/unit/mailer_test.rb +++ b/test/unit/mailer_test.rb @@ -195,7 +195,7 @@ class MailerTest < ActiveSupport::TestCase issue = Issue.generate!(:description => '@jsmith') assert Mailer.deliver_issue_add(issue) assert_select_email do - assert_select "a[href=?]", "http://localhost:3000/users/2", :text => 'John Smith' + assert_select "a[href=?]", "http://localhost:3000/users/2", :text => '@John Smith' end end -- 2.35.1