Project

General

Profile

Feature #36699 » 0001-Render-mentioned-users-with-leading-36699-13919.patch

Marius BĂLTEANU, 2022-03-18 22:31

View differences:

app/helpers/application_helper.rb
60 60
    case principal
61 61
    when User
62 62
      name = h(principal.name(options[:format]))
63
      name = "@" + name if options[:mention]
63 64
      css_classes = ''
64 65
      if principal.active? || (User.current.admin? && principal.logged?)
65 66
        url = user_url(principal, :only_path => only_path)
......
1265 1266
          elsif sep == "@"
1266 1267
            name = remove_double_quotes(identifier)
1267 1268
            u = User.visible.find_by("LOWER(login) = :s AND type = 'User'", :s => name.downcase)
1268
            link = link_to_user(u, :only_path => only_path, :class => 'user-mention') if u
1269
            link = link_to_user(u, :only_path => only_path, :class => 'user-mention', :mention => true) if u
1269 1270
          end
1270 1271
        end
1271 1272
        (leading + (link || "#{project_prefix}#{prefix}#{repo_prefix}#{sep}#{identifier}#{comment_suffix}"))
public/stylesheets/application.css
150 150
a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
151 151
a.project.closed, a.project.closed:link, a.project.closed:visited { color: #999; }
152 152
a.user.locked, a.user.locked:link, a.user.locked:visited {color: #999;}
153
a.user.user-mention {
154
  background-color: #DDEEFF;
155
  padding: 0.1em 0.1em;
156
  border-radius: 0.1em;
157
}
153 158

  
154 159
#sidebar a.selected {line-height:1.7em; padding:1px 3px 2px 2px; margin-left:-2px; background-color:#9DB9D5; color:#fff; border-radius:2px;}
155 160
#sidebar a.selected:hover {text-decoration:none;}
test/helpers/application_helper_test.rb
562 562
      'user:jsmith'                 => link_to_user(User.find_by_id(2)),
563 563
      'user:JSMITH'                 => link_to_user(User.find_by_id(2)),
564 564
      'user#2'                      => link_to_user(User.find_by_id(2)),
565
      '@jsmith'                     => link_to_user(User.find_by_id(2), class: 'user-mention'),
566
      '@jsmith.'                    => "#{link_to_user(User.find_by_id(2), class: 'user-mention')}.",
567
      '@JSMITH'                     => link_to_user(User.find_by_id(2), class: 'user-mention'),
568
      '@abcd@example.com'           => link_to_user(User.find_by_id(u_email_id), class: 'user-mention'),
565
      '@jsmith'                     => link_to_user(User.find_by_id(2), class: 'user-mention', mention: true),
566
      '@jsmith.'                    => "#{link_to_user(User.find_by_id(2), class: 'user-mention', mention: true)}.",
567
      '@JSMITH'                     => link_to_user(User.find_by_id(2), class: 'user-mention', mention: true),
568
      '@abcd@example.com'           => link_to_user(User.find_by_id(u_email_id), class: 'user-mention', mention: true),
569 569
      'user:abcd@example.com'       => link_to_user(User.find_by_id(u_email_id)),
570
      '@foo.bar@example.com'        => link_to_user(User.find_by_id(u_email_id_2), class: 'user-mention'),
570
      '@foo.bar@example.com'        => link_to_user(User.find_by_id(u_email_id_2), class: 'user-mention', mention: true),
571 571
      'user:foo.bar@example.com'    => link_to_user(User.find_by_id(u_email_id_2)),
572 572
      # invalid user
573 573
      'user:foobar'                 => 'user:foobar',
......
596 596
      # user link format: @jsmith@somenet.foo
597 597
      raw = "@jsmith@somenet.foo should not be parsed in jsmith@somenet.foo"
598 598
      assert_match(
599
        %r{<p><a class="user active user-mention".*>#{u.name}</a> should not be parsed in #{html}</p>},
599
        %r{<p><a class="user active user-mention".*>@#{u.name}</a> should not be parsed in #{html}</p>},
600 600
        textilizable(raw, :project => Project.find(1))
601 601
      )
602 602
      # user link format: user:jsmith@somenet.foo
......
616 616
      # user link format: @jsmith@somenet.foo
617 617
      raw = "@jsmith@somenet.foo should not be parsed in jsmith@somenet.foo"
618 618
      assert_match(
619
        %r{<p><a class=\"user active user-mention\".*>#{u.name}</a> should not be parsed in #{html}</p>},
619
        %r{<p><a class=\"user active user-mention\".*>@#{u.name}</a> should not be parsed in #{html}</p>},
620 620
        textilizable(raw, :project => Project.find(1))
621 621
      )
622 622
      # user link format: user:jsmith@somenet.foo
test/unit/mailer_test.rb
195 195
    issue = Issue.generate!(:description => '@jsmith')
196 196
    assert Mailer.deliver_issue_add(issue)
197 197
    assert_select_email do
198
      assert_select "a[href=?]", "http://localhost:3000/users/2", :text => 'John Smith'
198
      assert_select "a[href=?]", "http://localhost:3000/users/2", :text => '@John Smith'
199 199
    end
200 200
  end
201 201

  
(2-2/2)