Merge branch 'fix-links-target-blank' into 'security'
Adds rel="noopener noreferrer" to all links with target="_blank" See merge request !2071
This commit is contained in:
parent
153b594c06
commit
c5a9d73ad8
30 changed files with 38 additions and 36 deletions
|
@ -14,6 +14,7 @@ export default {
|
|||
class="btn external_url"
|
||||
:href="externalUrl"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
title="Environment external URL">
|
||||
<i class="fa fa-external-link" aria-hidden="true"></i>
|
||||
</a>
|
||||
|
|
|
@ -14,13 +14,13 @@ import MiniPipelineGraph from './mini_pipeline_graph_dropdown';
|
|||
<%= ci_success_icon %>
|
||||
<span>
|
||||
Deployed to
|
||||
<a href="<%- url %>" target="_blank" class="environment">
|
||||
<a href="<%- url %>" target="_blank" rel="noopener noreferrer" class="environment">
|
||||
<%- name %>
|
||||
</a>
|
||||
<span class="js-environment-timeago" data-toggle="tooltip" data-placement="top" data-title="<%- deployed_at_formatted %>">
|
||||
<%- deployed_at %>
|
||||
</span>
|
||||
<a class="js-environment-link" href="<%- external_url %>" target="_blank">
|
||||
<a class="js-environment-link" href="<%- external_url %>" target="_blank" rel="noopener noreferrer">
|
||||
<i class="fa fa-external-link"></i>
|
||||
View on <%- external_url_formatted %>
|
||||
</a>
|
||||
|
|
|
@ -215,6 +215,6 @@ module BlobHelper
|
|||
end
|
||||
|
||||
def open_raw_file_button(path)
|
||||
link_to icon('file-code-o'), path, class: 'btn btn-sm has-tooltip', target: '_blank', title: 'Open raw', data: { container: 'body' }
|
||||
link_to icon('file-code-o'), path, class: 'btn btn-sm has-tooltip', target: '_blank', rel: 'noopener noreferrer', title: 'Open raw', data: { container: 'body' }
|
||||
end
|
||||
end
|
||||
|
|
|
@ -211,7 +211,7 @@ module CommitsHelper
|
|||
external_url = environment.external_url_for(diff_new_path, commit_sha)
|
||||
return unless external_url
|
||||
|
||||
link_to(external_url, class: 'btn btn-file-option has-tooltip', target: '_blank', title: "View on #{environment.formatted_external_url}", data: { container: 'body' }) do
|
||||
link_to(external_url, class: 'btn btn-file-option has-tooltip', target: '_blank', rel: 'noopener noreferrer', title: "View on #{environment.formatted_external_url}", data: { container: 'body' }) do
|
||||
icon('external-link')
|
||||
end
|
||||
end
|
||||
|
|
|
@ -7,7 +7,7 @@ module ImportHelper
|
|||
def provider_project_link(provider, path_with_namespace)
|
||||
url = __send__("#{provider}_project_url", path_with_namespace)
|
||||
|
||||
link_to path_with_namespace, url, target: '_blank'
|
||||
link_to path_with_namespace, url, target: '_blank', rel: 'noopener noreferrer'
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
.form-actions
|
||||
= f.submit 'Save', class: 'btn btn-save append-right-10'
|
||||
- if @appearance.persisted?
|
||||
= link_to 'Preview last save', preview_admin_appearances_path, class: 'btn', target: '_blank'
|
||||
= link_to 'Preview last save', preview_admin_appearances_path, class: 'btn', target: '_blank', rel: 'noopener noreferrer'
|
||||
|
||||
- if @appearance.updated_at
|
||||
%span.pull-right
|
||||
|
|
|
@ -404,7 +404,7 @@
|
|||
Enable Sentry
|
||||
.help-block
|
||||
Sentry is an error reporting and logging tool which is currently not shipped with GitLab, get it here:
|
||||
%a{ href: 'https://getsentry.com', target: '_blank' } https://getsentry.com
|
||||
%a{ href: 'https://getsentry.com', target: '_blank', rel: 'noopener noreferrer' } https://getsentry.com
|
||||
|
||||
.form-group
|
||||
= f.label :sentry_dsn, 'Sentry DSN', class: 'control-label col-sm-2'
|
||||
|
|
|
@ -15,6 +15,6 @@
|
|||
= link_to note.attachment.url, target: '_blank' do
|
||||
= image_tag note.attachment.url, class: 'note-image-attach'
|
||||
- else
|
||||
= link_to note.attachment.url, target: "_blank", class: 'note-file-attach' do
|
||||
= link_to note.attachment.url, target: '_blank', class: 'note-file-attach' do
|
||||
%i.fa.fa-paperclip
|
||||
= note.attachment_identifier
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
%br
|
||||
Used by more than 100,000 organizations, GitLab is the most popular solution to manage git repositories on-premises.
|
||||
%br
|
||||
Read more about GitLab at #{link_to promo_host, promo_url, target: '_blank'}.
|
||||
Read more about GitLab at #{link_to promo_host, promo_url, target: '_blank', rel: 'noopener noreferrer'}.
|
||||
- if current_application_settings.help_page_text.present?
|
||||
%hr
|
||||
= markdown_field(current_application_settings, :help_page_text)
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
- @already_added_projects.each do |project|
|
||||
%tr{ id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}" }
|
||||
%td
|
||||
= link_to project.import_source, "https://bitbucket.org/#{project.import_source}", target: '_blank'
|
||||
= link_to project.import_source, "https://bitbucket.org/#{project.import_source}", target: '_blank', rel: 'noopener noreferrer'
|
||||
%td
|
||||
= link_to project.path_with_namespace, [project.namespace.becomes(Namespace), project]
|
||||
%td.job-status
|
||||
|
@ -50,7 +50,7 @@
|
|||
- @repos.each do |repo|
|
||||
%tr{ id: "repo_#{repo.owner}___#{repo.slug}" }
|
||||
%td
|
||||
= link_to repo.full_name, "https://bitbucket.org/#{repo.full_name}", target: "_blank"
|
||||
= link_to repo.full_name, "https://bitbucket.org/#{repo.full_name}", target: '_blank', rel: 'noopener noreferrer'
|
||||
%td.import-target
|
||||
%fieldset.row
|
||||
.input-group
|
||||
|
@ -70,7 +70,7 @@
|
|||
- @incompatible_repos.each do |repo|
|
||||
%tr{ id: "repo_#{repo.owner}___#{repo.slug}" }
|
||||
%td
|
||||
= link_to repo.full_name, "https://bitbucket.org/#{repo.full_name}", target: '_blank'
|
||||
= link_to repo.full_name, "https://bitbucket.org/#{repo.full_name}", target: '_blank', rel: 'noopener noreferrer'
|
||||
%td.import-target
|
||||
%td.import-actions-job-status
|
||||
= label_tag 'Incompatible Project', nil, class: 'label label-danger'
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
- @repos.each do |repo|
|
||||
%tr{ id: "repo_#{repo["id"]}" }
|
||||
%td
|
||||
= link_to repo["path_with_namespace"], "https://gitlab.com/#{repo["path_with_namespace"]}", target: "_blank"
|
||||
= link_to repo["path_with_namespace"], "https://gitlab.com/#{repo["path_with_namespace"]}", target: "_blank", rel: 'noopener noreferrer'
|
||||
%td.import-target
|
||||
= import_project_target(repo['namespace']['path'], repo['name'])
|
||||
%td.import-actions.job-status
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
%li
|
||||
%p
|
||||
Go to
|
||||
#{link_to "Google Takeout", "https://www.google.com/settings/takeout", target: "_blank"}.
|
||||
#{link_to "Google Takeout", "https://www.google.com/settings/takeout", target: '_blank', rel: 'noopener noreferrer'}.
|
||||
%li
|
||||
%p
|
||||
Make sure you're logged into the account that owns the projects you'd like to import.
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
- @already_added_projects.each do |project|
|
||||
%tr{ id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}" }
|
||||
%td
|
||||
= link_to project.import_source, "https://code.google.com/p/#{project.import_source}", target: "_blank"
|
||||
= link_to project.import_source, "https://code.google.com/p/#{project.import_source}", target: "_blank", rel: 'noopener noreferrer'
|
||||
%td
|
||||
= link_to project.path_with_namespace, [project.namespace.becomes(Namespace), project]
|
||||
%td.job-status
|
||||
|
@ -53,7 +53,7 @@
|
|||
- @repos.each do |repo|
|
||||
%tr{ id: "repo_#{repo.id}" }
|
||||
%td
|
||||
= link_to repo.name, "https://code.google.com/p/#{repo.name}", target: "_blank"
|
||||
= link_to repo.name, "https://code.google.com/p/#{repo.name}", target: "_blank", rel: 'noopener noreferrer'
|
||||
%td.import-target
|
||||
#{current_user.username}/#{repo.name}
|
||||
%td.import-actions.job-status
|
||||
|
@ -63,7 +63,7 @@
|
|||
- @incompatible_repos.each do |repo|
|
||||
%tr{ id: "repo_#{repo.id}" }
|
||||
%td
|
||||
= link_to repo.name, "https://code.google.com/p/#{repo.name}", target: "_blank"
|
||||
= link_to repo.name, "https://code.google.com/p/#{repo.name}", target: "_blank", rel: 'noopener noreferrer'
|
||||
%td.import-target
|
||||
%td.import-actions-job-status
|
||||
= label_tag "Incompatible Project", nil, class: "label label-danger"
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
%p
|
||||
= icon('circle', class: 'cgreen')
|
||||
Integration is active for
|
||||
= link_to koding_project_url, target: '_blank' do
|
||||
= link_to koding_project_url, target: '_blank', rel: 'noopener noreferrer' do
|
||||
#{current_application_settings.koding_url}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
or change it at #{link_to Gitlab.config.gravatar.host, "http://" + Gitlab.config.gravatar.host}
|
||||
.col-lg-9
|
||||
.clearfix.avatar-image.append-bottom-default
|
||||
= link_to avatar_icon(@user, 400), target: '_blank' do
|
||||
= link_to avatar_icon(@user, 400), target: '_blank', rel: 'noopener noreferrer' do
|
||||
= image_tag avatar_icon(@user, 160), alt: '', class: 'avatar s160'
|
||||
%h5.prepend-top-0
|
||||
Upload new avatar
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
- else
|
||||
.nothing-here-block
|
||||
The SVG could not be displayed as it is too large, you can
|
||||
#{link_to('view the raw file', namespace_project_raw_path(@project.namespace, @project, @id), target: '_blank')}
|
||||
#{link_to('view the raw file', namespace_project_raw_path(@project.namespace, @project, @id), target: '_blank', rel: 'noopener noreferrer')}
|
||||
instead.
|
||||
- else
|
||||
%img{ src: namespace_project_raw_path(@project.namespace, @project, tree_join(@commit.id, blob.path)), alt: "#{blob.name}" }
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
.nothing-here-block
|
||||
File too large, you can
|
||||
= succeed '.' do
|
||||
= link_to 'view the raw file', namespace_project_raw_path(@project.namespace, @project, @id), target: '_blank'
|
||||
= link_to 'view the raw file', namespace_project_raw_path(@project.namespace, @project, @id), target: '_blank', rel: 'noopener noreferrer'
|
||||
|
||||
- else
|
||||
- blob.load_all_data!(@repository)
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
- if @conflict
|
||||
.alert.alert-danger
|
||||
Someone edited the file the same time you did. Please check out
|
||||
= link_to "the file", namespace_project_blob_path(@project.namespace, @project, tree_join(@target_branch, @file_path)), target: "_blank"
|
||||
= link_to "the file", namespace_project_blob_path(@project.namespace, @project, tree_join(@target_branch, @file_path)), target: "_blank", rel: 'noopener noreferrer'
|
||||
and make sure your changes will not unintentionally remove theirs.
|
||||
|
||||
.file-editor
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
- if koding_enabled? && current_user && @repository.koding_yml && can_push_branch?(@project, @project.default_branch)
|
||||
= link_to koding_project_url(@project), class: 'btn project-action-button inline', target: '_blank' do
|
||||
= link_to koding_project_url(@project), class: 'btn project-action-button inline', target: '_blank', rel: 'noopener noreferrer' do
|
||||
Run in IDE (Koding)
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project.
|
||||
To set up CA, you must first define a production environment by setting up your CI and then deploy to production.
|
||||
%p
|
||||
%a.btn{ href: help_page_path('user/project/cycle_analytics'), target: "_blank" } Read more
|
||||
%a.btn{ href: help_page_path('user/project/cycle_analytics'), target: '_blank' } Read more
|
||||
.col-md-6.overview-image
|
||||
%span.overview-icon
|
||||
= custom_icon ('icon_cycle_analytics_overview')
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
- if environment.external_url && can?(current_user, :read_environment, environment)
|
||||
= link_to environment.external_url, target: '_blank', class: 'btn external-url' do
|
||||
= link_to environment.external_url, target: '_blank', rel: 'noopener noreferrer', class: 'btn external-url' do
|
||||
= icon('external-link')
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
.pull-right
|
||||
- if @merge_request.source_branch_exists?
|
||||
- if koding_enabled? && @repository.koding_yml
|
||||
= link_to koding_project_url(@merge_request.source_project, @merge_request.source_branch, @merge_request.commits.first.short_id), class: "btn inline btn-grouped btn-sm", target: '_blank' do
|
||||
= link_to koding_project_url(@merge_request.source_project, @merge_request.source_branch, @merge_request.commits.first.short_id), class: "btn inline btn-grouped btn-sm", target: '_blank', rel: 'noopener noreferrer' do
|
||||
Run in IDE (Koding)
|
||||
= link_to "#modal_merge_info", class: "btn inline btn-grouped btn-sm", "data-toggle" => "modal" do
|
||||
Check out branch
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
%strong Tip:
|
||||
= succeed '.' do
|
||||
You can also checkout merge requests locally by
|
||||
= link_to 'following these guidelines', help_page_path('user/project/merge_requests.md', anchor: "checkout-merge-requests-locally"), target: '_blank'
|
||||
= link_to 'following these guidelines', help_page_path('user/project/merge_requests.md', anchor: "checkout-merge-requests-locally"), target: '_blank', rel: 'noopener noreferrer'
|
||||
|
||||
:javascript
|
||||
$(function(){
|
||||
|
|
|
@ -4,13 +4,13 @@
|
|||
%ul.list-unstyled.indent-list
|
||||
%li
|
||||
1.
|
||||
= link_to 'https://docs.mattermost.com/developer/slash-commands.html#enabling-custom-commands', target: '_blank', rel: 'noreferrer noopener nofollow' do
|
||||
= link_to 'https://docs.mattermost.com/developer/slash-commands.html#enabling-custom-commands', target: '_blank', rel: 'noopener noreferrer nofollow' do
|
||||
Enable custom slash commands
|
||||
= icon('external-link')
|
||||
on your Mattermost installation
|
||||
%li
|
||||
2.
|
||||
= link_to 'https://docs.mattermost.com/developer/slash-commands.html#set-up-a-custom-command', target: '_blank', rel: 'noreferrer noopener nofollow' do
|
||||
= link_to 'https://docs.mattermost.com/developer/slash-commands.html#set-up-a-custom-command', target: '_blank', rel: 'noopener noreferrer nofollow' do
|
||||
Add a slash command
|
||||
= icon('external-link')
|
||||
in your Mattermost team with these options:
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
%p
|
||||
This service allows users to perform common operations on this
|
||||
project by entering slash commands in Mattermost.
|
||||
= link_to help_page_path('user/project/integrations/mattermost_slash_commands.md'), target: '_blank', ref: 'noreferrer nofollow noopener' do
|
||||
= link_to help_page_path('user/project/integrations/mattermost_slash_commands.md'), target: '_blank' do
|
||||
View documentation
|
||||
= icon('external-link')
|
||||
%p.inline
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
%p
|
||||
This service allows users to perform common operations on this
|
||||
project by entering slash commands in Slack.
|
||||
= link_to help_page_path('user/project/integrations/slack_slash_commands.md'), target: '_blank', ref: 'noreferrer nofollow noopener' do
|
||||
= link_to help_page_path('user/project/integrations/slack_slash_commands.md'), target: '_blank' do
|
||||
View documentation
|
||||
= icon('external-link')
|
||||
%p.inline
|
||||
|
@ -57,7 +57,7 @@
|
|||
= label_tag nil, 'Customize icon', class: 'col-sm-2 col-xs-12 control-label'
|
||||
.col-sm-10.col-xs-12.text-block
|
||||
= image_tag(asset_url('slash-command-logo.png'), width: 36, height: 36)
|
||||
= link_to('Download image', asset_url('gitlab_logo.png'), class: 'btn btn-sm', target: '_blank')
|
||||
= link_to('Download image', asset_url('gitlab_logo.png'), class: 'btn btn-sm', target: '_blank', rel: 'noopener noreferrer')
|
||||
|
||||
.form-group
|
||||
= label_tag nil, 'Autocomplete', class: 'col-sm-2 col-xs-12 control-label'
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
.alert.alert-danger
|
||||
Someone edited the #{issuable.class.model_name.human.downcase} the same time you did.
|
||||
Please check out
|
||||
= link_to "the #{issuable.class.model_name.human.downcase}", polymorphic_path([@project.namespace.becomes(Namespace), @project, issuable]), target: "_blank"
|
||||
= link_to "the #{issuable.class.model_name.human.downcase}", polymorphic_path([@project.namespace.becomes(Namespace), @project, issuable]), target: "_blank", rel: 'noopener noreferrer'
|
||||
and make sure your changes will not unintentionally remove theirs
|
||||
|
||||
.form-group
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
.profile-header
|
||||
.avatar-holder
|
||||
= link_to avatar_icon(@user, 400), target: '_blank' do
|
||||
= link_to avatar_icon(@user, 400), target: '_blank', rel: 'noopener noreferrer' do
|
||||
= image_tag avatar_icon(@user, 90), class: "avatar s90", alt: ''
|
||||
|
||||
.user-info
|
||||
|
|
|
@ -2,7 +2,6 @@ module Banzai
|
|||
module Filter
|
||||
# HTML filter that wraps links around inline images.
|
||||
class ImageLinkFilter < HTML::Pipeline::Filter
|
||||
|
||||
# Find every image that isn't already wrapped in an `a` tag, create
|
||||
# a new node (a link to the image source), copy the image as a child
|
||||
# of the anchor, and then replace the img with the link-wrapped version.
|
||||
|
@ -12,7 +11,8 @@ module Banzai
|
|||
'a',
|
||||
class: 'no-attachment-icon',
|
||||
href: img['src'],
|
||||
target: '_blank'
|
||||
target: '_blank',
|
||||
rel: 'noopener noreferrer'
|
||||
)
|
||||
|
||||
link.children = img.clone
|
||||
|
|
|
@ -43,6 +43,7 @@ module Banzai
|
|||
element['title'] || element['alt'],
|
||||
href: element['src'],
|
||||
target: '_blank',
|
||||
rel: 'noopener noreferrer',
|
||||
title: "Download '#{element['title'] || element['alt']}'")
|
||||
download_paragraph = doc.document.create_element('p')
|
||||
download_paragraph.children = link
|
||||
|
|
Loading…
Reference in a new issue