Commit e482a4d5 authored by Douwe Maan's avatar Douwe Maan

Merge branch 'tz-no-cdn-for-svg-sprites' into 'master'

Icon Sprite URL needs to be local even if asset_host is set

See merge request gitlab-org/gitlab-ce!15289
parents b488c161 fce34b4b
...@@ -23,10 +23,17 @@ module IconsHelper ...@@ -23,10 +23,17 @@ module IconsHelper
render "shared/icons/#{icon_name}.svg", size: size render "shared/icons/#{icon_name}.svg", size: size
end end
def sprite_icon_path
# SVG Sprites currently don't work across domains, so in the case of a CDN
# we have to set the current path deliberately to prevent addition of asset_host
sprite_base_url = Gitlab.config.gitlab.url if ActionController::Base.asset_host
ActionController::Base.helpers.image_path('icons.svg', host: sprite_base_url)
end
def sprite_icon(icon_name, size: nil, css_class: nil) def sprite_icon(icon_name, size: nil, css_class: nil)
css_classes = size ? "s#{size}" : "" css_classes = size ? "s#{size}" : ""
css_classes << " #{css_class}" unless css_class.blank? css_classes << " #{css_class}" unless css_class.blank?
content_tag(:svg, content_tag(:use, "", { "xlink:href" => "#{image_path('icons.svg')}##{icon_name}" } ), class: css_classes.empty? ? nil : css_classes) content_tag(:svg, content_tag(:use, "", { "xlink:href" => "#{sprite_icon_path}##{icon_name}" } ), class: css_classes.empty? ? nil : css_classes)
end end
def audit_icon(names, options = {}) def audit_icon(names, options = {})
......
...@@ -20,7 +20,7 @@ module Gitlab ...@@ -20,7 +20,7 @@ module Gitlab
gon.gitlab_url = Gitlab.config.gitlab.url gon.gitlab_url = Gitlab.config.gitlab.url
gon.revision = Gitlab::REVISION gon.revision = Gitlab::REVISION
gon.gitlab_logo = ActionController::Base.helpers.asset_path('gitlab_logo.png') gon.gitlab_logo = ActionController::Base.helpers.asset_path('gitlab_logo.png')
gon.sprite_icons = ActionController::Base.helpers.asset_path('icons.svg') gon.sprite_icons = IconsHelper.sprite_icon_path
if current_user if current_user
gon.current_user_id = current_user.id gon.current_user_id = current_user.id
......
require 'spec_helper' require 'spec_helper'
describe IconsHelper do describe IconsHelper do
let(:icons_path) { ActionController::Base.helpers.image_path("icons.svg") }
describe 'icon' do describe 'icon' do
it 'returns aria-hidden by default' do it 'returns aria-hidden by default' do
star = icon('star') star = icon('star')
...@@ -16,22 +18,42 @@ describe IconsHelper do ...@@ -16,22 +18,42 @@ describe IconsHelper do
end end
end end
describe 'sprite_icon_path' do
it 'returns relative path' do
expect(sprite_icon_path)
.to eq icons_path
end
context 'when an asset_host is set in the config it will return an absolute local URL' do
let(:asset_host) { 'http://assets' }
before do
allow(ActionController::Base).to receive(:asset_host).and_return(asset_host)
end
it 'returns an absolute URL on that asset host' do
expect(sprite_icon_path)
.to eq ActionController::Base.helpers.image_path("icons.svg", host: Gitlab.config.gitlab.url)
end
end
end
describe 'sprite_icon' do describe 'sprite_icon' do
icon_name = 'clock' icon_name = 'clock'
it 'returns svg icon html' do it 'returns svg icon html' do
expect(sprite_icon(icon_name).to_s) expect(sprite_icon(icon_name).to_s)
.to eq "<svg><use xlink:href=\"/images/icons.svg##{icon_name}\"></use></svg>" .to eq "<svg><use xlink:href=\"#{icons_path}##{icon_name}\"></use></svg>"
end end
it 'returns svg icon html + size classes' do it 'returns svg icon html + size classes' do
expect(sprite_icon(icon_name, size: 72).to_s) expect(sprite_icon(icon_name, size: 72).to_s)
.to eq "<svg class=\"s72\"><use xlink:href=\"/images/icons.svg##{icon_name}\"></use></svg>" .to eq "<svg class=\"s72\"><use xlink:href=\"#{icons_path}##{icon_name}\"></use></svg>"
end end
it 'returns svg icon html + size classes + additional class' do it 'returns svg icon html + size classes + additional class' do
expect(sprite_icon(icon_name, size: 72, css_class: 'icon-danger').to_s) expect(sprite_icon(icon_name, size: 72, css_class: 'icon-danger').to_s)
.to eq "<svg class=\"s72 icon-danger\"><use xlink:href=\"/images/icons.svg##{icon_name}\"></use></svg>" .to eq "<svg class=\"s72 icon-danger\"><use xlink:href=\"#{icons_path}##{icon_name}\"></use></svg>"
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment