fa_rails 0.1.20 → 0.1.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 157fd0642d7e283f63085edd82d1e83941440c53b62f1c7e547a448faa07d43f
4
- data.tar.gz: 1fe81fae07ca36ee1451d435fb3355b4ad3c8fc9baa3b25f22f4823ce23f062d
3
+ metadata.gz: 2a0166501def630ab5880108fdd887614849f6a2b77a23c1e042c98a459a0130
4
+ data.tar.gz: 8dcd8b62b61b8f0dfe9a323378ccab27547e627dbfa3c5a97643da2720dbb0ab
5
5
  SHA512:
6
- metadata.gz: 1ed38c30ff8f9aca74e873dc2308506434a424d6955ea982207d292500bd906755395536e93569647688a05f2cd479421a2f26fdc8cefb36cc33c60219877261
7
- data.tar.gz: 1a630a476fb8b48a3c4800ac3907a2478e11bc99f6cdc656f50000e28581192375ad783648a3299252b040300c500cee14007d3d46e83418e88a21b9a7b4acf7
6
+ metadata.gz: 5a17c51cd3277b386aea9211cd8e6b4744778f5546ca75936b9bdb917e39413096c6e672a9ec42191dfc8aa8e4472083b6a7324be5410aa1d4bf6a4e8ed54024
7
+ data.tar.gz: 5ec4b0d9261b7313305f306340a2d8bb0b060072161c4ba95f35ee5bd9abe18726b755cd630d1f63c2d2a6ef472d6247ce7fcbd78e8ccb53b58423d8cf984277
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.5.1
data/Gemfile.lock CHANGED
@@ -1,15 +1,15 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fa_rails (0.1.20)
4
+ fa_rails (0.1.25)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  diff-lcs (1.3)
10
10
  docile (1.3.1)
11
- json (2.1.0)
12
- rake (12.3.1)
11
+ json (2.3.1)
12
+ rake (12.3.3)
13
13
  rspec (3.7.0)
14
14
  rspec-core (~> 3.7.0)
15
15
  rspec-expectations (~> 3.7.0)
data/README.md CHANGED
@@ -29,29 +29,41 @@ corresponding locations in your app, and ensure you correctly include all files.
29
29
 
30
30
  ### FontAwesome CDN
31
31
 
32
- Go to the FontAwesome
33
- [How to Use](https://fontawesome.com/how-to-use/on-the-web/setup/getting-started?using=web-fonts-with-css)
34
- page and copy the appropriate CDN link tag.
32
+ You can also link into the FontAwesome CDN, in either of two ways:
35
33
 
36
- You can also `include FA`, then use the built-in helper method in your layout:
34
+ #### Version-Specific Link
35
+
36
+ You can use this helper method in your layout:
37
37
 
38
38
  ```ruby
39
39
  FA::Link.new(version: 'v5.3.1', integrity: 'sha384-some-key-here').safe
40
40
  ```
41
41
 
42
- #### Free
42
+ Or, go to the FontAwesome
43
+ [How to Use](https://fontawesome.com/how-to-use/on-the-web/setup/getting-started?using=web-fonts-with-css)
44
+ page and copy the appropriate CDN link tag.
45
+
46
+ **Be sure to also register each domain that will use this CDN link.**
47
+
48
+ ##### Free
43
49
 
44
50
  ```html
45
51
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-some-key-here" crossorigin="anonymous">
46
52
  ```
47
53
 
48
- #### Pro
54
+ ##### Pro
49
55
 
50
56
  ```html
51
57
  <link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-some-key-here" crossorigin="anonymous">
52
58
  ```
53
59
 
54
- **Be sure to also register each domain that will use this CDN link.**
60
+ #### Kit Link
61
+
62
+ Use this helper method in your layout:
63
+
64
+ ```ruby
65
+ FA::Link.kit('kit-id')
66
+ ```
55
67
 
56
68
  ## Usage
57
69
 
@@ -90,6 +102,7 @@ options #=> Hash
90
102
  size: Integer # Stepped scaling factor
91
103
 
92
104
  css: String # Arbitrary CSS classes, space-delimited
105
+ raw_css: Hash # Arbitrary raw CSS, as a hash of attributes and values
93
106
  fa: String # Arbitrary FA classes, space-delimited – each is automatically prefixed with `fa-`
94
107
  title: String #=> Tooltip text
95
108
  grow: Integer #=> Transform value – amount to grow by
@@ -114,6 +127,7 @@ options #=> Hash
114
127
  position: Symbol # Indicator of which corner to display on – one of [:tr, :tl, :br, :bl]
115
128
 
116
129
  css: String # Arbitrary CSS classes, space-delimited
130
+ raw_css: Hash # Arbitrary raw CSS, as a hash of attributes and values
117
131
  fa: String # Arbitrary FA classes, space-delimited – each is automatically prefixed with `fa-`
118
132
  title: String #=> Tooltip text
119
133
  grow: Integer #=> Transform value – amount to grow by
@@ -143,24 +157,39 @@ css #=> String – arbitrary CSS classes, space-delimited, applied to the layer
143
157
  ```ruby
144
158
  # Fixed-width lock icon
145
159
  FA::Icon.p('lock', fa: 'fw')
146
- #=> "<i class='fas fa-fw fa-lock fa-1x' data-fa-transform='' title=''></i>"
160
+ #=> "<i class='fas fa-fw fa-lock fa-1x' style='' data-fa-transform='' title=''></i>"
161
+
162
+ # Duotone fire-alt icon with swapped opacity
163
+ FA::Icon.p('fire-alt', fa: 'swap-opacity')
164
+ #=> "<i class='fas fa-swap-opacity fa-fire-alt fa-1x' style='' data-fa-transform='' title=''></i>"
165
+
166
+ # Duotone fire-alt icon with specified opacities
167
+ FA::Icon.p('fire-alt', style: :duotone, raw_css: { '--fa-primary-opacity' => '0.6', '--fa-secondary-opacity' => '0.4' })
168
+ #=> "<i class='fad fa-fire-alt fa-1x' style='--fa-primary-opacity: 0.4; --fa-secondary-opacity: 0.6;' data-fa-transform='' title=''></i>"
169
+
170
+ # You can also use this simplified configuration option for adding styles
171
+ # This is reforatted and merged into :raw_css
172
+ # Accepts either snake_case symbols or spear-case strings as keys, and strings or symbols as values
173
+ # This is the easiest way to add primary/secondary styles for duotone icons
174
+ FA::Icon.p('fire-alt', style: :duotone, fa_styles: { primary_opacity: '0.6', secondary_opacity: '0.4', primary_color: :green, secondary_color: '#DD2200' })
175
+ #=> "<i class='fad fa-fire-alt fa-1x' style='--fa-primary-opacity: 0.6; --fa-secondary-opacity: 0.4; --fa-primary-color: green; --fa-secondary-color: #DD2200;' data-fa-transform='' title=''></i>"
147
176
 
148
177
  # Counter span, with value 5
149
178
  FA::Span.p('counter', 5)
150
- #=> "<span class='fa-layers-counter ' data-fa-transform=''>5</span>"
179
+ #=> "<span class='fa-layers-counter ' style='' data-fa-transform=''>5</span>"
151
180
 
152
181
  # Gray envelope icon with red exclamation mark overlayed, with tooltip 'Invalid email address'
153
182
  FA::Layer.p([{ name: 'envelope', options: { css: :gray } }, { name: 'exclamation', options: { css: :red } }], title: 'Invalid email address')
154
183
  #=> "<span class='icon fa-layers fa-stack fa-fw ' title='Invalid email address'>" \
155
- # "<i class='fas fa-stack-1x gray fa-envelope fa-1x' data-fa-transform='grow-0' title='Invalid email address'></i>" \
156
- # "<i class='fas fa-stack-1x red fa-exclamation fa-1x' data-fa-transform='grow-0' title='Invalid email address'></i>" \
184
+ # "<i class='fas fa-stack-1x gray fa-envelope fa-1x' style='' data-fa-transform='grow-0' title='Invalid email address'></i>" \
185
+ # "<i class='fas fa-stack-1x red fa-exclamation fa-1x' style='' data-fa-transform='grow-0' title='Invalid email address'></i>" \
157
186
  # "</span>"
158
187
 
159
188
  # Blue envelope with red counter on the top left corner, with value 7
160
189
  FA::Layer.p([{ name: 'envelope', options: { css: :blue } }, { name: 'counter', text: 7, options: { css: :red, position: :tl } }])
161
190
  #=> "<span class='icon fa-layers fa-stack fa-fw ' title=''>" \
162
- # "<i class='fas fa-stack-1x blue fa-envelope fa-1x' data-fa-transform='grow-0' title=''></i>" \
163
- # "<span class='fa-stack-1x red fa-layers-counter fa-layers-top-left' data-fa-transform='grow-0'>7</span>" \
191
+ # "<i class='fas fa-stack-1x blue fa-envelope fa-1x' style='' data-fa-transform='grow-0' title=''></i>" \
192
+ # "<span class='fa-stack-1x red fa-layers-counter fa-layers-top-left' style='' data-fa-transform='grow-0'>7</span>" \
164
193
  # "</span>"
165
194
 
166
195
  # The same stack, but using the FA::Build DSL (with various syntaxes).
data/fa_rails.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'fa_rails'
3
- s.version = '0.1.20'
4
- s.date = '2019-07-31'
3
+ s.version = '0.1.25'
4
+ s.date = '2021-04-03'
5
5
  s.summary = 'FontAwesome helper for Rails'
6
6
  s.description = 'A helper module for using FontAwesome icons in Rails.'
7
7
  s.homepage = 'http://rubygems.org/gems/fa_rails'
data/lib/fa/base.rb CHANGED
@@ -3,6 +3,11 @@
3
3
  module FA
4
4
  # FontAwesome 5 (Pro) Helper core class for inheritance
5
5
  class Base
6
+ STYLES = {
7
+ solid: 's', regular: 'r', light: 'l', thin: 't',
8
+ duotone: 'd', brands: 'b', kit_upload: 'k'
9
+ }.freeze
10
+
6
11
  # Outputs the formatted string directly.
7
12
  def raw
8
13
  #
@@ -43,7 +48,7 @@ module FA
43
48
  css = @classes.flatten.join(' ')
44
49
  transforms = @transforms.join(' ')
45
50
 
46
- "<i class='#{css}' data-fa-transform='#{transforms}' " \
51
+ "<i class='#{css}' style='#{@styles}' data-fa-transform='#{transforms}' " \
47
52
  "title='#{options[:title]}'></i>"
48
53
  end
49
54
 
@@ -59,11 +64,11 @@ module FA
59
64
  css = @classes.flatten.reject { |c| c.to_s.match?(/^fa.$/) }.join(' ')
60
65
  transforms = @transforms.join(' ')
61
66
 
62
- "<span class='#{css}' data-fa-transform='#{transforms}'>#{text}</span>"
67
+ "<span class='#{css}' style='#{@styles}' data-fa-transform='#{transforms}'>#{text}</span>"
63
68
  end
64
69
 
65
70
  def fa_options(options)
66
- default = { style: :solid, css: '', fa: '', size: 1 }
71
+ default = { style: :solid, css: '', raw_css: {}, fa: '', size: 1 }
67
72
 
68
73
  default.merge(options.to_h)
69
74
  end
@@ -93,14 +98,36 @@ module FA
93
98
 
94
99
  def parse_options(options)
95
100
  parse_classes(options)
101
+ options = merge_fa_styles(options)
102
+ parse_styles(options)
96
103
  parse_transforms(options)
97
104
  end
98
105
 
99
106
  def parse_classes(options)
100
107
  @classes = []
101
108
  @classes << parse_style(options)
102
- @classes << options[:fa].to_s.split(' ').map { |c| "fa-#{c}" }
103
- @classes << options[:css].to_s.split(' ')
109
+ @classes << format_classes(options[:fa], prefix: 'fa-')
110
+ @classes << format_classes(options[:css])
111
+ end
112
+
113
+ def format_classes(classes, prefix: nil)
114
+ classes = classes.split(' ') if classes.is_a?(String)
115
+ classes.map { |c| "#{prefix}#{c}" } if classes.is_a?(Array)
116
+ end
117
+
118
+ def merge_fa_styles(options)
119
+ fa_styles = options.delete(:fa_styles)
120
+ return options unless fa_styles
121
+
122
+ fa_styles = fa_styles.each_with_object({}) do |(k, v), hash|
123
+ hash["--fa-#{k.to_s.tr('_', '-')}"] = v.to_s
124
+ end
125
+ options[:raw_css] = options[:raw_css].merge(fa_styles)
126
+ options
127
+ end
128
+
129
+ def parse_styles(options)
130
+ @styles = options[:raw_css].map { |k, v| "#{k}: #{v};" }.join(' ')
104
131
  end
105
132
 
106
133
  def parse_transforms(options)
@@ -113,10 +140,10 @@ module FA
113
140
  end
114
141
 
115
142
  def parse_style(options)
116
- return if options[:css].to_s.match?(/fa[srldb]/)
117
- return 'fas' unless %i[solid regular light duotone brands].include?(options[:style])
143
+ return if options[:css].to_s.match?(/fa[srldbk]/)
144
+ return 'fas' unless STYLES.keys.include?(options[:style])
118
145
 
119
- 'fa' + { solid: 's', regular: 'r', light: 'l', duotone: 'd', brands: 'b' }[options[:style]]
146
+ 'fa' + STYLES[options[:style]]
120
147
  end
121
148
  end
122
149
  end
data/spec/lib/fa_spec.rb CHANGED
@@ -28,20 +28,52 @@ RSpec.describe FA do
28
28
  end
29
29
 
30
30
  describe 'icon' do
31
- it 'should generate the correct icon from a string or symbol name' do
31
+ it 'should generate the correct icon from a string name' do
32
32
  expect(FA::Icon.p('help')).to eql(
33
- "<i class='fas fa-help fa-1x' data-fa-transform='' title=''></i>"
33
+ "<i class='fas fa-help fa-1x' style='' data-fa-transform='' title=''></i>"
34
34
  )
35
+ end
35
36
 
37
+ it 'should generate the correct icon from a symbol name' do
36
38
  expect(FA::Icon.p(:help)).to eql(
37
- "<i class='fas fa-help fa-1x' data-fa-transform='' title=''></i>"
39
+ "<i class='fas fa-help fa-1x' style='' data-fa-transform='' title=''></i>"
38
40
  )
39
41
  end
40
42
 
41
43
  it 'should generate the correct icon from a configuration hash' do
42
44
  fa = { name: 'help', options: { style: :light, size: 2 } }
43
45
  expect(FA::Icon.p(fa)).to eql(
44
- "<i class='fal fa-help fa-2x' data-fa-transform='' title=''></i>"
46
+ "<i class='fal fa-help fa-2x' style='' data-fa-transform='' title=''></i>"
47
+ )
48
+ end
49
+
50
+ it 'should correctly handle a string fa option' do
51
+ expect(FA::Icon.p(:help, fa: 'fw 2x')).to eql(
52
+ "<i class='fas fa-fw fa-2x fa-help fa-1x' style='' data-fa-transform='' title=''></i>"
53
+ )
54
+ end
55
+
56
+ it 'should correctly handle an array fa option' do
57
+ expect(FA::Icon.p(:help, fa: %i[fw 2x])).to eql(
58
+ "<i class='fas fa-fw fa-2x fa-help fa-1x' style='' data-fa-transform='' title=''></i>"
59
+ )
60
+ end
61
+
62
+ it 'should correctly handle a string css option' do
63
+ expect(FA::Icon.p(:help, css: 'green big')).to eql(
64
+ "<i class='fas green big fa-help fa-1x' style='' data-fa-transform='' title=''></i>"
65
+ )
66
+ end
67
+
68
+ it 'should correctly handle an array css option' do
69
+ expect(FA::Icon.p(:help, css: %i[green big])).to eql(
70
+ "<i class='fas green big fa-help fa-1x' style='' data-fa-transform='' title=''></i>"
71
+ )
72
+ end
73
+
74
+ it 'should correctly handle a nil css option' do
75
+ expect(FA::Icon.p(:help, css: nil)).to eql(
76
+ "<i class='fas fa-help fa-1x' style='' data-fa-transform='' title=''></i>"
45
77
  )
46
78
  end
47
79
 
@@ -55,7 +87,20 @@ RSpec.describe FA do
55
87
 
56
88
  it 'should generate the correct brand icon' do
57
89
  expect(FA::Icon.p(:github, style: :brands)).to eql(
58
- "<i class='fab fa-github fa-1x' data-fa-transform='' title=''></i>"
90
+ "<i class='fab fa-github fa-1x' style='' data-fa-transform='' title=''></i>"
91
+ )
92
+ end
93
+
94
+ it 'should generate the correct icon with styles' do
95
+ expect(
96
+ FA::Icon.p(
97
+ 'fire-alt', style: :duotone, fa_styles: {
98
+ primary_opacity: '0.6', secondary_opacity: '0.4', primary_color: :green, secondary_color: '#DD2200'
99
+ }
100
+ )
101
+ ).to eql(
102
+ "<i class='fad fa-fire-alt fa-1x' style='--fa-primary-opacity: 0.6; --fa-secondary-opacity: 0.4; " \
103
+ "--fa-primary-color: green; --fa-secondary-color: #DD2200;' data-fa-transform='' title=''></i>"
59
104
  )
60
105
  end
61
106
  end
@@ -70,9 +115,9 @@ RSpec.describe FA do
70
115
 
71
116
  expect(FA::Layer.p(icons, grow: 2)).to eql(
72
117
  "<span class='icon fa-layers fa-stack fa-fw ' title=''>" \
73
- "<i class='fas fa-stack-1x fa-square fa-1x' data-fa-transform='grow-2' title=''></i>" \
74
- "<i class='fas fa-stack-1x fa-circle fa-1x' data-fa-transform='grow-3' title=''></i>" \
75
- "<i class='far fa-stack-1x fa-exclamation fa-1x' data-fa-transform='grow-2' title=''></i>" \
118
+ "<i class='fas fa-stack-1x fa-square fa-1x' style='' data-fa-transform='grow-2' title=''></i>" \
119
+ "<i class='fas fa-stack-1x fa-circle fa-1x' style='' data-fa-transform='grow-3' title=''></i>" \
120
+ "<i class='far fa-stack-1x fa-exclamation fa-1x' style='' data-fa-transform='grow-2' title=''></i>" \
76
121
  '</span>'
77
122
  )
78
123
  end
@@ -85,8 +130,8 @@ RSpec.describe FA do
85
130
 
86
131
  expect(FA::Layer.p(icons)).to eql(
87
132
  "<span class='icon fa-layers fa-stack fa-fw ' title=''>" \
88
- "<i class='fas fa-stack-1x fa-square fa-1x' data-fa-transform='grow-0' title=''></i>" \
89
- "<span class='fa-stack-1x fa-layers-counter fa-layers-top-left' data-fa-transform='grow-0'>17</span>" \
133
+ "<i class='fas fa-stack-1x fa-square fa-1x' style='' data-fa-transform='grow-0' title=''></i>" \
134
+ "<span class='fa-stack-1x fa-layers-counter fa-layers-top-left' style='' data-fa-transform='grow-0'>17</span>" \
90
135
  '</span>'
91
136
  )
92
137
  end
@@ -99,8 +144,8 @@ RSpec.describe FA do
99
144
 
100
145
  expect(FA::Layer.p(icons, title: 'right')).to eql(
101
146
  "<span class='icon fa-layers fa-stack fa-fw ' title='right'>" \
102
- "<i class='fas fa-stack-1x fa-square fa-1x' data-fa-transform='grow-0' title='right'></i>" \
103
- "<i class='fas fa-stack-1x fa-exclamation fa-1x' data-fa-transform='grow-0' title='right'></i>" \
147
+ "<i class='fas fa-stack-1x fa-square fa-1x' style='' data-fa-transform='grow-0' title='right'></i>" \
148
+ "<i class='fas fa-stack-1x fa-exclamation fa-1x' style='' data-fa-transform='grow-0' title='right'></i>" \
104
149
  '</span>'
105
150
  )
106
151
  end
@@ -115,8 +160,8 @@ RSpec.describe FA do
115
160
 
116
161
  expect(layer).to eql(
117
162
  "<span class='icon fa-layers fa-stack fa-fw ' title=''>" \
118
- "<i class='fas fa-stack-1x fa-circle fa-1x' data-fa-transform='grow-0' title=''></i>" \
119
- "<span class='fa-stack-1x fa-layers-counter ' data-fa-transform='grow-0'>7</span>" \
163
+ "<i class='fas fa-stack-1x fa-circle fa-1x' style='' data-fa-transform='grow-0' title=''></i>" \
164
+ "<span class='fa-stack-1x fa-layers-counter ' style='' data-fa-transform='grow-0'>7</span>" \
120
165
  '</span>'
121
166
  )
122
167
  end
@@ -125,7 +170,7 @@ RSpec.describe FA do
125
170
  describe 'span' do
126
171
  it 'should generate the correct span from a string or symbol type' do
127
172
  expect(FA::Span.p(:text, 'Hello')).to eql(
128
- "<span class='fa-layers-text ' data-fa-transform=''>Hello</span>"
173
+ "<span class='fa-layers-text ' style='' data-fa-transform=''>Hello</span>"
129
174
  )
130
175
  end
131
176
 
@@ -133,7 +178,7 @@ RSpec.describe FA do
133
178
  span = { type: :text, text: 'World', options: { position: :bl } }
134
179
  expect(FA::Span.p(span)).to eql(
135
180
  "<span class='fa-layers-text fa-layers-bottom-left' " \
136
- "data-fa-transform=''>World</span>"
181
+ "style='' data-fa-transform=''>World</span>"
137
182
  )
138
183
  end
139
184
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fa_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.20
4
+ version: 0.1.25
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Fiander
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-31 00:00:00.000000000 Z
11
+ date: 2021-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -77,6 +77,7 @@ extensions: []
77
77
  extra_rdoc_files: []
78
78
  files:
79
79
  - ".gitignore"
80
+ - ".ruby-version"
80
81
  - ".travis.yml"
81
82
  - Gemfile
82
83
  - Gemfile.lock