From 90dc19e9f0be8ac530b5e5e042791143ce0ba0ce Mon Sep 17 00:00:00 2001 From: jakeburden Date: Fri, 30 Aug 2019 18:16:39 -0400 Subject: [PATCH] Create and use external_link helper Creates a helper method that takes body text and a url. The output is a external link with icon. It contains the noopenner noreferrer attributes for security. Usage: external_link(domain.title, domain.url) Add rspec test for ExternalLinkHelper Add changelog for MR 32130 --- app/helpers/external_link_helper.rb | 9 +++++++++ app/views/projects/pages/_access.html.haml | 8 ++------ app/views/projects/pages/_list.html.haml | 4 +--- app/views/projects/pages_domains/show.html.haml | 4 +--- .../66067-pages-domain-doesnt-set-target-blank.yml | 5 +++++ spec/helpers/external_link_helper_spec.rb | 12 ++++++++++++ 6 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 app/helpers/external_link_helper.rb create mode 100644 changelogs/unreleased/66067-pages-domain-doesnt-set-target-blank.yml create mode 100644 spec/helpers/external_link_helper_spec.rb diff --git a/app/helpers/external_link_helper.rb b/app/helpers/external_link_helper.rb new file mode 100644 index 00000000000..fe908b3ae1c --- /dev/null +++ b/app/helpers/external_link_helper.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +module ExternalLinkHelper + def external_link(body, url) + link_to url, target: '_blank', rel: 'noopener noreferrer' do + "#{body} #{icon('external-link')}".html_safe + end + end +end diff --git a/app/views/projects/pages/_access.html.haml b/app/views/projects/pages/_access.html.haml index a5ea15b2934..7b6d46964a2 100644 --- a/app/views/projects/pages/_access.html.haml +++ b/app/views/projects/pages/_access.html.haml @@ -8,14 +8,10 @@ = _("Your pages are served under:") %p - = link_to @project.pages_url, target: '_blank', rel: 'noopener noreferrer' do - = @project.pages_url - = icon('external-link') + = external_link(@project.pages_url, @project.pages_url) - @project.pages_domains.each do |domain| %p - = link_to domain.url, target: '_blank', rel: 'noopener noreferrer' do - = domain.url - = icon('external-link') + = external_link(domain.url, domain.url) .card-footer.alert-primary = _("It may take up to 30 minutes before the site is available after the first deployment.") diff --git a/app/views/projects/pages/_list.html.haml b/app/views/projects/pages/_list.html.haml index 4f16110c5c9..c4285e7f3d2 100644 --- a/app/views/projects/pages/_list.html.haml +++ b/app/views/projects/pages/_list.html.haml @@ -12,9 +12,7 @@ .domain-status.ci-status-icon.has-tooltip{ class: "ci-status-icon-#{status}", title: tooltip } = sprite_icon("status_#{status}", size: 16 ) .domain-name - = link_to domain.url, target: '_blank', rel: 'noopener noreferrer' do - = domain.url - = icon('external-link') + = external_link(domain.url, domain.url) - if domain.subject %div %span.badge.badge-gray Certificate: #{domain.subject} diff --git a/app/views/projects/pages_domains/show.html.haml b/app/views/projects/pages_domains/show.html.haml index 3351da7f81f..33837e21c8d 100644 --- a/app/views/projects/pages_domains/show.html.haml +++ b/app/views/projects/pages_domains/show.html.haml @@ -21,9 +21,7 @@ %td = _("Domain") %td - = link_to @domain.url, target: :_blank, rel: 'noopener noreferrer' do - = @domain.url - = icon('external-link') + = external_link(@domain.url, @domain.url) %tr %td = _("DNS") diff --git a/changelogs/unreleased/66067-pages-domain-doesnt-set-target-blank.yml b/changelogs/unreleased/66067-pages-domain-doesnt-set-target-blank.yml new file mode 100644 index 00000000000..726d4b163d2 --- /dev/null +++ b/changelogs/unreleased/66067-pages-domain-doesnt-set-target-blank.yml @@ -0,0 +1,5 @@ +--- +title: Makes custom Pages domain open as external link in new tab +merge_request: 32130 +author: jakeburden +type: fixed diff --git a/spec/helpers/external_link_helper_spec.rb b/spec/helpers/external_link_helper_spec.rb new file mode 100644 index 00000000000..60ad188e98b --- /dev/null +++ b/spec/helpers/external_link_helper_spec.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe ExternalLinkHelper do + include IconsHelper + + it 'returns external link with icon' do + expect(external_link('https://gitlab.com', 'https://gitlab.com').to_s) + .to eq('https://gitlab.com ') + end +end