Project

General

Profile

Patch #15689 » 15689-theme_favicon.patch

Felix Schäfer, 2013-12-14 12:31

View differences:

app/helpers/application_helper.rb
1254 1254
  end
1255 1255

  
1256 1256
  def favicon
1257
    "<link rel='shortcut icon' href='#{image_path('/favicon.ico')}' />".html_safe
1257
    fav_path = (current_theme && current_theme.favicon?) ? current_theme.favicon_path : '/favicon.ico'
1258
    "<link rel='shortcut icon' href='#{image_path(fav_path)}' />".html_safe
1258 1259
  end
1259 1260

  
1260 1261
  def robot_exclusion_tag
lib/redmine/themes.rb
75 75
        @javascripts ||= assets("javascripts", "js")
76 76
      end
77 77

  
78
      def favicons
79
        @favicons ||= assets("favicon")
80
      end
81

  
82
      def favicon
83
        favicons.first
84
      end
85

  
86
      def favicon?
87
        favicon.present?
88
      end
89

  
78 90
      def stylesheet_path(source)
79 91
        "/themes/#{dir}/stylesheets/#{source}"
80 92
      end
......
87 99
        "/themes/#{dir}/javascripts/#{source}"
88 100
      end
89 101

  
102
      def favicon_path
103
        "/themes/#{dir}/favicon/#{favicon}"
104
      end
105

  
90 106
      private
91 107

  
92 108
      def assets(dir, ext=nil)
test/integration/lib/redmine/themes_test.rb
57 57
    @theme.javascripts.delete 'theme'
58 58
  end
59 59

  
60
  def test_use_default_favicon_if_theme_provides_none
61
    get '/'
62

  
63
    assert_response :success
64
    assert_tag tag: 'link',
65
      attributes: {rel: 'shortcut icon', href: %r{\A/favicon.ico}}
66
  end
67

  
68
  def test_use_theme_favicon_if_theme_provides_one
69
    # Simulate a theme favicon
70
    @theme.favicons << 'a.ico'
71
    get '/'
72

  
73
    assert_response :success
74
    assert_tag tag: 'link',
75
      attributes: {rel: 'shortcut icon', href: %r{\A/themes/#{@theme.dir}/favicon/a.ico}}
76
  ensure
77
    @theme.favicons.delete 'a.ico'
78
  end
79

  
80
  def test_use_only_one_theme_favicon_if_theme_provides_many
81
    @theme.favicons.concat %w{b.ico a.png}
82
    get '/'
83

  
84
    assert_response :success
85
    assert_tag tag: 'link',
86
      attributes: {rel: 'shortcut icon', href: %r{\A/themes/#{@theme.dir}/favicon/b.ico}}
87
  ensure
88
    @theme.favicons.delete("b.ico")
89
    @theme.favicons.delete("a.png")
90
  end
91

  
60 92
  def test_with_sub_uri
61 93
    Redmine::Utils.relative_url_root = '/foo'
62 94
    @theme.javascripts << 'theme'
95
    @theme.favicons << 'a.ico'
63 96
    get '/'
64 97

  
65 98
    assert_response :success
......
67 100
      :attributes => {:href => %r{^/foo/themes/#{@theme.dir}/stylesheets/application.css}}
68 101
    assert_tag :tag => 'script',
69 102
      :attributes => {:src => %r{^/foo/themes/#{@theme.dir}/javascripts/theme.js}}
70

  
103
    assert_tag tag: 'link',
104
      attributes: {rel: 'shortcut icon', href: %r{\A/foo/themes/#{@theme.dir}/favicon/a.ico}}
71 105
  ensure
72 106
    Redmine::Utils.relative_url_root = ''
73 107
  end
(2-2/2)