Explorar o código

Update the icon_tag and omniauth_provider_icon helpers for Font-Awesome 6

Akinori MUSHA hai 4 meses
pai
achega
9e836f8b56
Modificáronse 2 ficheiros con 16 adicións e 12 borrados
  1. 4 6
      app/helpers/application_helper.rb
  2. 12 6
      spec/helpers/application_helper_spec.rb

+ 4 - 6
app/helpers/application_helper.rb

@@ -1,14 +1,12 @@
 module ApplicationHelper
   def icon_tag(name, options = {})
-    if dom_class = options[:class]
-      dom_class = ' ' << dom_class
-    end
+    dom_class = options[:class]
 
     case name
     when /\Aglyphicon-/
-      "<span class='glyphicon #{name}#{dom_class}'></span>".html_safe
+      "<span class='glyphicon #{name}#{' ' if dom_class}#{dom_class}'></span>".html_safe
     when /\Afa-/
-      "<i class='fa #{name}#{dom_class}'></i>".html_safe
+      "<i class='#{'fa-solid ' unless /(?:\A| )fa-(?:solid|brands)(?: |\z)/.match?(dom_class)}#{name}#{' ' if dom_class}#{dom_class}'></i>".html_safe
     else
       raise "Unrecognized icon name: #{name}"
     end
@@ -56,7 +54,7 @@ module ApplicationHelper
   def omniauth_provider_icon(provider)
     case provider.to_sym
     when :twitter, :tumblr, :github, :dropbox, :google
-      icon_tag("fa-#{provider}")
+      icon_tag("fa-#{provider}", class: 'fa-brands')
     else
       icon_tag("fa-lock")
     end

+ 12 - 6
spec/helpers/application_helper_spec.rb

@@ -17,13 +17,19 @@ describe ApplicationHelper do
     it 'returns a FontAwesome icon element' do
       icon = icon_tag('fa-copy')
       expect(icon).to be_html_safe
-      expect(Nokogiri(icon).at('i.fa.fa-copy')).to be_a Nokogiri::XML::Element
+      expect(Nokogiri(icon).at('i.fa-solid.fa-copy')).to be_a Nokogiri::XML::Element
     end
 
-    it 'returns a FontAwesome icon element' do
+    it 'returns a FontAwesome icon element with an additional class' do
       icon = icon_tag('fa-copy', class: 'text-info')
       expect(icon).to be_html_safe
-      expect(Nokogiri(icon).at('i.fa.fa-copy.text-info')).to be_a Nokogiri::XML::Element
+      expect(Nokogiri(icon).at('i.fa-solid.fa-copy.text-info')).to be_a Nokogiri::XML::Element
+    end
+
+    it 'returns a FontAwesome brand icon element' do
+      icon = icon_tag('fa-github', class: 'fa-brands')
+      expect(icon).to be_html_safe
+      expect(Nokogiri(icon).at('i.fa-brands.fa-github')).to be_a Nokogiri::XML::Element
     end
   end
 
@@ -142,21 +148,21 @@ describe ApplicationHelper do
     it 'returns a correct icon tag for Twitter' do
       icon = omniauth_provider_icon(:twitter)
       expect(icon).to be_html_safe
-      elem = Nokogiri(icon).at('i.fa.fa-twitter')
+      elem = Nokogiri(icon).at('i.fa-brands.fa-twitter')
       expect(elem).to be_a Nokogiri::XML::Element
     end
 
     it 'returns a correct icon tag for GitHub' do
       icon = omniauth_provider_icon(:github)
       expect(icon).to be_html_safe
-      elem = Nokogiri(icon).at('i.fa.fa-github')
+      elem = Nokogiri(icon).at('i.fa-brands.fa-github')
       expect(elem).to be_a Nokogiri::XML::Element
     end
 
     it 'returns a correct icon tag for other services' do
       icon = omniauth_provider_icon(:evernote)
       expect(icon).to be_html_safe
-      elem = Nokogiri(icon).at('i.fa.fa-lock')
+      elem = Nokogiri(icon).at('i.fa-solid.fa-lock')
       expect(elem).to be_a Nokogiri::XML::Element
     end
   end