world-flags 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. data/README.md +78 -6
  2. data/VERSION +1 -1
  3. data/lib/world-flags.rb +15 -1
  4. data/lib/world_flags/helper/view/util.rb +3 -2
  5. data/lib/world_flags/helper/view.rb +12 -5
  6. data/lib/world_flags/util/language.rb +1 -1
  7. data/spec/world_flags/config_spec.rb +25 -0
  8. data/spec/world_flags/helper/{locale_helper_spec.rb → locale_spec.rb} +0 -0
  9. data/spec/world_flags/helper/util_spec.rb +36 -0
  10. data/spec/world_flags/helper/view_spec.rb +122 -0
  11. data/vendor/assets/stylesheets/flags/basic.css +26 -21
  12. data/vendor/assets/stylesheets/flags/basic.scss.css +38 -31
  13. data/vendor/assets/stylesheets/flags/flags16-semi.css.erb +244 -244
  14. data/vendor/assets/stylesheets/flags/flags16-semi.css.scss.erb +244 -244
  15. data/vendor/assets/stylesheets/flags/flags16.css.erb +244 -244
  16. data/vendor/assets/stylesheets/flags/flags16.css.scss.erb +244 -244
  17. data/vendor/assets/stylesheets/flags/flags24-semi.css.erb +244 -244
  18. data/vendor/assets/stylesheets/flags/flags24-semi.css.scss.erb +244 -244
  19. data/vendor/assets/stylesheets/flags/flags24.css.erb +244 -244
  20. data/vendor/assets/stylesheets/flags/flags24.css.scss.erb +244 -244
  21. data/vendor/assets/stylesheets/flags/flags32-semi.css.erb +244 -244
  22. data/vendor/assets/stylesheets/flags/flags32-semi.css.scss.erb +244 -244
  23. data/vendor/assets/stylesheets/flags/flags32.css.erb +244 -244
  24. data/vendor/assets/stylesheets/flags/flags32.css.scss.erb +245 -245
  25. data/vendor/assets/stylesheets/flags/flags48-semi.css.erb +244 -244
  26. data/vendor/assets/stylesheets/flags/flags48-semi.css.scss.erb +244 -244
  27. data/vendor/assets/stylesheets/flags/flags48.css.erb +244 -244
  28. data/vendor/assets/stylesheets/flags/flags48.css.scss.erb +246 -246
  29. data/vendor/assets/stylesheets/flags/flags64-semi.css.scss.erb +244 -244
  30. data/vendor/assets/stylesheets/flags/flags64.css.scss.erb +244 -244
  31. data/world-flags.gemspec +6 -4
  32. metadata +7 -5
  33. data/spec/world_flags/view_helper_spec.rb +0 -113
data/README.md CHANGED
@@ -80,14 +80,22 @@ Alternatively
80
80
 
81
81
  ```haml
82
82
  = flag_list 32 do
83
- = flag(:ar)
84
- = flag(:gb, :selected => true)
83
+ = flag(:ar, 'Argentina')
84
+ = flag(:gb, 'England', :selected => true)
85
+ ```
86
+
87
+ Or using the locale mappings for the label...
88
+
89
+ ```haml
90
+ = flag_list 32 do
91
+ = flag(:ar)
92
+ = flag(:gb, :selected => true)
85
93
  ```
86
94
 
87
95
  Or using the #flag_code helper
88
96
 
89
97
  ```haml
90
- = flag(:ar) + flag(:gb, :selected => flag_code(I18n.locale)
98
+ = flag(:ar, 'Argentina') + flag(:gb, 'England', :selected => flag_code(I18n.locale)
91
99
  ```
92
100
 
93
101
  You can also include the :with_semi => true option in order to have flags not selected displayed with the 'semi' class (semi-bright image)
@@ -110,7 +118,13 @@ Note: The `  is needed in order for the background (flag icon) to have some
110
118
  The :title and :content can also be set to a string which is then displayed
111
119
 
112
120
  ```haml
113
- = flag :ar, :title => 'Argentina country', :content => 'Argh!'
121
+ = flag :ar, 'Argentina', :title => 'Argentina country', :content => 'Argh!'
122
+ ```
123
+
124
+ or using the locale mapping...
125
+
126
+ ```haml
127
+ = flag :ar, :title => 'Argentina country'
114
128
  ```
115
129
 
116
130
  To get content rendered for the <li>
@@ -121,6 +135,18 @@ To get content rendered for the <li>
121
135
 
122
136
  Note: There is also a #flag_selected? helper, which is (and/or can be) used to determine if the flag to be drawn should have the "selected" class set)
123
137
 
138
+ ## Customizing output
139
+
140
+ You can customize the output by the flag view helper methods:
141
+
142
+ ```ruby
143
+ WorldFlags.flag_list_tag = :div
144
+ WorldFlags.flag_tag = :span
145
+ WorldFlags.flag_text = ''
146
+ ```
147
+
148
+ To do more customization, look at the `world_flags/helper/view/util.rb` file.
149
+
124
150
  ## Using localization
125
151
 
126
152
  You can specify whether to look up labels for the flags for either language or country and for which locale to look up the labels (see Configuring localization)
@@ -132,10 +158,11 @@ Use danish (da) country labels
132
158
  = flags :ar, :br, :gb, :country => :da
133
159
  ```
134
160
 
135
- Use language labels for current locale
161
+ Use language labels for current locale.
162
+ Note: Also use border class (see CSS below)
136
163
 
137
164
  ```haml
138
- = flag_list 32 do
165
+ = flag_list 32, :class => 'border' do
139
166
  = flags :ar, :br, :gb, :language => I18n.locale
140
167
  ```
141
168
 
@@ -194,10 +221,55 @@ when :ip
194
221
  country_code_from_ip browser_ip
195
222
  ```
196
223
 
224
+ ## CSS
225
+
226
+ The `basic.css` file in the `vendor/assets/stylesheets/flags` folder of this repo defines the basic styling of flags. Override these styles to fit your needs.
227
+
228
+ ```ruby
229
+ .flags {
230
+ list-style-type: none;
231
+ padding: 0;
232
+ margin-left: 0;
233
+ }
234
+
235
+ .flags .l {
236
+ float: left;
237
+ }
238
+
239
+ .border .flag {
240
+ border: 1px solid;
241
+ }
242
+
243
+ .border .flag.selected {
244
+ border: 1px solid black;
245
+ }
246
+
247
+ .f16.flag {
248
+ line-height: 16px;
249
+ }
250
+
251
+ .f24.flag {
252
+ line-height: 24px;
253
+ }
254
+
255
+ .f32.flag {
256
+ line-height: 32px;
257
+ }
258
+
259
+ .f48.flag {
260
+ line-height: 48px;
261
+ }
262
+
263
+ .f64.flag {
264
+ line-height: 64px;
265
+ }
266
+ ```
267
+
197
268
  ## TODO for version 1.0
198
269
 
199
270
  Suggestions welcome ;)
200
271
 
272
+
201
273
  ## Enjoy
202
274
 
203
275
  Copyright (2012) Kristian Mandrup
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.1
1
+ 0.6.0
data/lib/world-flags.rb CHANGED
@@ -13,7 +13,21 @@ module WorldFlags
13
13
  include Util
14
14
 
15
15
  attr_writer :active_locales
16
- attr_writer :locale_flag_map
16
+ attr_writer :locale_flag_map
17
+
18
+ attr_writer :flag_tag, :flag_list_tag, :flag_text
19
+
20
+ def flag_text
21
+ @flag_text ||= '' #' &nbsp;'
22
+ end
23
+
24
+ def flag_tag
25
+ @flag_tag ||= :li
26
+ end
27
+
28
+ def flag_list_tag
29
+ @flag_list_tag ||= :ul
30
+ end
17
31
 
18
32
  def config &block
19
33
  (block_given? && block.arity == 1) ? yield(self) : instance_eval(&block)
@@ -9,7 +9,7 @@ module WorldFlags
9
9
  when String
10
10
  options[:content]
11
11
  else
12
- '&nbsp;'
12
+ WorldFlags.flag_text
13
13
  end
14
14
  end
15
15
 
@@ -34,10 +34,11 @@ module WorldFlags
34
34
 
35
35
  # add semi class if not selected
36
36
  semi = (selected.blank? ? ' semi' : '') if options[:with_semi]
37
+ xclass = options[:class] ? " #{options[:class]}" : ''
37
38
 
38
39
  flag_locale = WorldFlags.locale(code)
39
40
 
40
- {:class => "flag #{code}#{selected}#{semi}", :'data-country_name' => country_name, :'data-language_name' => language_name, :'data-cc' => code, :'data-locale' => flag_locale}.merge(options[:html] || {}).merge(extra_options)
41
+ {:class => "flag #{code}#{selected}#{semi}#{xclass}", :'data-country_name' => country_name, :'data-language_name' => language_name, :'data-cc' => code, :'data-locale' => flag_locale}.merge(options[:html] || {}).merge(extra_options)
41
42
  end
42
43
 
43
44
  def self.flag_selected? code, options = {}
@@ -7,13 +7,14 @@ module WorldFlags
7
7
  [16, 24, 32, 48, 64]
8
8
  end
9
9
 
10
- def flags_list size = 24, &block
10
+ def flags_list size = 24, options = {}, &block
11
11
  raise "Missing block" unless block_given?
12
12
  unless WorldFlags::Helper::View.flag_sizes.include?(size.to_i)
13
13
  raise "Supported sizes are only #{WorldFlags::Helper::View.flag_sizes}"
14
14
  end
15
15
  content = capture(&block)
16
- content_tag :ul, content, :class => "f#{size}"
16
+ xclass = options[:class] ? " #{options[:class]}" : ''
17
+ content_tag WorldFlags.flag_list_tag, content, :class => "f#{size} flags#{xclass}"
17
18
  end
18
19
  alias_method :flag_list, :flags_list
19
20
 
@@ -40,14 +41,20 @@ module WorldFlags
40
41
  flags args, options.merge(:title => true)
41
42
  end
42
43
 
43
- def flag code, name, options = {}
44
+ def flag code, *args
45
+ options = args.extract_options!
46
+ name = args.first.kind_of?(String) ? args.first : WorldFlags.label(code, options)
47
+
44
48
  label = WorldFlags::Helper::View::Util.label_for options
45
49
  title = WorldFlags::Helper::View::Util.title_for name, options
46
50
 
47
- content_tag :li, label.html_safe, WorldFlags::Helper::View::Util.flag_options(code, title, name, options)
51
+ content_tag WorldFlags.flag_tag, label.html_safe, WorldFlags::Helper::View::Util.flag_options(code, title, name, options)
48
52
  end
49
53
 
50
- def flag_title code, name, options = {}
54
+ def flag_title code, *args
55
+ options = args.extract_options!
56
+ name = args.first.kind_of?(String) ? args.first : WorldFlags.label(code, options)
57
+
51
58
  flag code, name, options.merge(:title => true)
52
59
  end
53
60
 
@@ -14,7 +14,7 @@ module WorldFlags
14
14
  locale_languages_map = languages_map[locale] || languages_map[default_locale_used]
15
15
  locale_languages_map = languages_map[:en] if locale_languages_map.blank?
16
16
 
17
- raise "No language-locale map defined for locale: #{locale} or :en in #{languages.inspect}" if locale_languages_map.blank?
17
+ raise "No language-locale map defined for locale: #{locale} or :en in #{locale_languages_map.inspect}" if locale_languages_map.blank?
18
18
 
19
19
  # raise("No language map defined for language code: #{code} in #{locale_languages_map[code]}")
20
20
  code_language = locale_languages_map[code] ? locale_languages_map[code] : locale_languages_map[default_code_used]
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe WorldFlags::Helper::View do
4
+ include ControllerTestHelpers,
5
+ WorldFlags::Helper::View
6
+
7
+ let(:default_size) { 24 }
8
+
9
+ before do
10
+ I18n.locale = 'ar'
11
+
12
+ WorldFlags.config do |c|
13
+ c.auto_select!
14
+ c.available_locales = [:da, :sv, :nb, :en]
15
+ c.reset!
16
+ c.raise_error!
17
+ end
18
+ end
19
+
20
+ describe 'WorldFlags#locale' do
21
+ it 'should translate flag code to locale' do
22
+ WorldFlags.locale('dk').to_s.should == 'da'
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe WorldFlags::Helper::View do
4
+ include ControllerTestHelpers,
5
+ WorldFlags::Helper::View
6
+
7
+ let(:default_size) { 24 }
8
+
9
+ before do
10
+ I18n.locale = 'en'
11
+
12
+ WorldFlags.config do |c|
13
+ c.auto_select!
14
+ c.available_locales = [:ar, :en]
15
+ c.reset!
16
+ c.raise_error!
17
+ end
18
+ end
19
+
20
+ describe 'customize flag tags and text' do
21
+ before do
22
+ WorldFlags.config do |c|
23
+ c.flag_list_tag = :div
24
+ c.flag_tag = :span
25
+ c.flag_text = ''
26
+ end
27
+ end
28
+
29
+ it "should list flags using customized tags and text" do
30
+ output = flags_list 32 do
31
+ flags [:ar]
32
+ end
33
+ output.should == "<div class=\"f32 flags\"><span class=\"flag ar\" data-cc=\"ar\" data-country_name=\"Argentina\" data-language_name=\"Spanish\" data-locale=\"ar\"></span></div>"
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,122 @@
1
+ require 'spec_helper'
2
+
3
+ describe WorldFlags::Helper::View do
4
+ include ControllerTestHelpers,
5
+ WorldFlags::Helper::View
6
+
7
+ let(:default_size) { 24 }
8
+
9
+ before do
10
+ I18n.locale = 'ar'
11
+
12
+ WorldFlags.config do |c|
13
+ c.auto_select!
14
+ c.available_locales = [:da, :sv, :nb, :en]
15
+ c.reset!
16
+ c.raise_error!
17
+ end
18
+ end
19
+
20
+ describe '#flags_list' do
21
+ it "should be empty, with an empty block" do
22
+ output = flags_list do
23
+ end
24
+ output.should == "<ul class=\"f#{default_size} flags\"></ul>"
25
+ end
26
+
27
+ it "should work with alias :flag_list" do
28
+ output = flag_list do
29
+ end
30
+ output.should == "<ul class=\"f#{default_size} flags\"></ul>"
31
+ end
32
+
33
+ it "should raise error when unsupported flag size" do
34
+ lambda do flags_list(8) { }
35
+ end.should raise_error
36
+ end
37
+
38
+ it "should set size to 16 or 32" do
39
+ output = flags_list 32 do
40
+ end
41
+ output.should == "<ul class=\"f32 flags\"></ul>"
42
+ end
43
+ end
44
+
45
+ describe '#flags' do
46
+ it "should list flags using Array" do
47
+ output = flags_list 32 do
48
+ flags [:ar, :gb]
49
+ end
50
+ output.should == "<ul class=\"f32 flags\"><li class=\"flag ar selected\" data-cc=\"ar\" data-country_name=\"Argentina\" data-language_name=\"Spanish\" data-locale=\"ar\"></li><li class=\"flag gb\" data-cc=\"gb\" data-country_name=\"United Kingdom\" data-language_name=\"British English\" data-locale=\"gb\"></li></ul>"
51
+ end
52
+
53
+ it "should list flags using args" do
54
+ output = flags_list 32 do
55
+ flags :ar, :gb
56
+ end
57
+ output.should == "<ul class=\"f32 flags\"><li class=\"flag ar selected\" data-cc=\"ar\" data-country_name=\"Argentina\" data-language_name=\"Spanish\" data-locale=\"ar\"></li><li class=\"flag gb\" data-cc=\"gb\" data-country_name=\"United Kingdom\" data-language_name=\"British English\" data-locale=\"gb\"></li></ul>"
58
+ end
59
+
60
+ it "should list flags using args and :with_semi" do
61
+ output = flags_list 32 do
62
+ flags :ar, :gb, :with_semi => true
63
+ end
64
+ output.should == "<ul class=\"f32 flags\"><li class=\"flag ar selected\" data-cc=\"ar\" data-country_name=\"Argentina\" data-language_name=\"Spanish\" data-locale=\"ar\"></li><li class=\"flag gb semi\" data-cc=\"gb\" data-country_name=\"United Kingdom\" data-language_name=\"British English\" data-locale=\"gb\"></li></ul>"
65
+ end
66
+ end
67
+
68
+ describe '#flag' do
69
+ it "should create a flag tag" do
70
+ output = flag :ar, 'Argentina'
71
+ output.should == "<li class=\"flag ar selected\" data-cc=\"ar\" data-country_name=\"Argentina\" data-language_name=\"Spanish\" data-locale=\"ar\"></li>"
72
+ end
73
+ end
74
+
75
+ describe '#flag_title' do
76
+ it "should list flags" do
77
+ output = flag_title :ar, 'Argentina'
78
+ output.should == "<li class=\"flag ar selected\" data-cc=\"ar\" data-country_name=\"Argentina\" data-language_name=\"Spanish\" data-locale=\"ar\" title=\"Argentina\"></li>"
79
+ end
80
+ end
81
+
82
+ describe 'Countries' do
83
+ context 'Danish locale' do
84
+ before do
85
+ I18n.locale = 'da'
86
+ end
87
+
88
+ it "should list nordic flags using args and :with_semi" do
89
+ output = flags_list 32 do
90
+ flags :dk, :se, :no, :with_semi => true, :country => :da
91
+ end
92
+ output.should == "<ul class=\"f32 flags\"><li class=\"flag dk selected\" data-cc=\"dk\" data-country_name=\"Danmark\" data-language_name=\"Dansk\" data-locale=\"da\"></li><li class=\"flag se semi\" data-cc=\"se\" data-country_name=\"Sverige\" data-language_name=\"Svensk\" data-locale=\"sv\"></li><li class=\"flag no semi\" data-cc=\"no\" data-country_name=\"Norge\" data-language_name=\"Norsk\" data-locale=\"nb\"></li></ul>"
93
+ end
94
+ end
95
+
96
+ context 'Swedish locale' do
97
+ before do
98
+ I18n.locale = 'sv'
99
+ end
100
+
101
+ it "should list nordic flags using args and :with_semi" do
102
+ output = flags_list 32 do
103
+ flags :dk, :se, :no, :with_semi => true, :country => :da
104
+ end
105
+ output.should == "<ul class=\"f32 flags\"><li class=\"flag dk semi\" data-cc=\"dk\" data-country_name=\"Danmark\" data-language_name=\"Dansk\" data-locale=\"da\"></li><li class=\"flag se selected\" data-cc=\"se\" data-country_name=\"Sverige\" data-language_name=\"Svenska\" data-locale=\"sv\"></li><li class=\"flag no semi\" data-cc=\"no\" data-country_name=\"Norge\" data-language_name=\"Norsk\" data-locale=\"nb\"></li></ul>"
106
+ end
107
+ end
108
+
109
+ context 'Norwegian locale' do
110
+ before do
111
+ I18n.locale = 'nb'
112
+ end
113
+
114
+ it "should list nordic flags using args and :with_semi" do
115
+ output = flags_list 32 do
116
+ flags :dk, :se, :no, :with_semi => true, :country => :da
117
+ end
118
+ output.should == "<ul class=\"f32 flags\"><li class=\"flag dk semi\" data-cc=\"dk\" data-country_name=\"Danmark\" data-language_name=\"Dansk\" data-locale=\"da\"></li><li class=\"flag se semi\" data-cc=\"se\" data-country_name=\"Sverige\" data-language_name=\"Svensk\" data-locale=\"sv\"></li><li class=\"flag no selected\" data-cc=\"no\" data-country_name=\"Norge\" data-language_name=\"Norsk\" data-locale=\"nb\"></li></ul>"
119
+ end
120
+ end
121
+ end
122
+ end
@@ -1,32 +1,37 @@
1
- #languages {
2
- float: right;
1
+ .flags {
2
+ list-style-type: none;
3
+ padding: 0;
4
+ margin-left: 0;
3
5
  }
4
6
 
5
- #languages ul {
6
- list-style-type: none;
7
- padding: 0;
8
- margin-left: 0;
7
+ .flags .l {
8
+ float: left;
9
9
  }
10
10
 
11
- #languages li.flag {
12
- float:left;
13
- border: 1px solid none;
11
+ .border .flag {
12
+ border: 1px solid;
14
13
  }
15
14
 
16
- #languages li.flag.selected {
17
- float:left;
18
- border: 1px solid black;
15
+ .border .flag.selected {
16
+ border: 1px solid black;
19
17
  }
20
18
 
21
- #languages .f32 li.flag {
22
- padding-bottom: 6px;
23
- padding-right: 26px;
24
- margin-right: 8px;
19
+ .f16.flag {
20
+ line-height: 16px;
25
21
  }
26
22
 
27
- #languages .f64 li.flag {
28
- padding-top: 12px;
29
- padding-bottom: 24px;
30
- padding-right: 60px;
31
- margin-right: 8px;
23
+ .f24.flag {
24
+ line-height: 24px;
25
+ }
26
+
27
+ .f32.flag {
28
+ line-height: 32px;
29
+ }
30
+
31
+ .f48.flag {
32
+ line-height: 48px;
33
+ }
34
+
35
+ .f64.flag {
36
+ line-height: 64px;
32
37
  }
@@ -1,32 +1,39 @@
1
- #languages {
2
- float: right;
3
-
4
- ul {
5
- list-style-type: none;
6
- padding: 0;
7
- margin-left: 0;
8
- }
9
-
10
- li.flag {
11
- float:left;
12
- border: 1px solid none;
13
- }
14
-
15
- li.flag.selected {
16
- float:left;
17
- border: 1px solid black;
18
- }
19
-
20
- .f32 li.flag {
21
- padding-bottom: 6px;
22
- padding-right: 26px;
23
- margin-right: 8px;
24
- }
25
-
26
- .f64 li.flag {
27
- padding-top: 12px;
28
- padding-bottom: 24px;
29
- padding-right: 60px;
30
- margin-right: 8px;
31
- }
1
+ .flags {
2
+ list-style-type: none;
3
+ padding: 0;
4
+ margin-left: 0;
5
+
6
+ .l {
7
+ float: left;
8
+ }
9
+ }
10
+
11
+ .border {
12
+ .flag {
13
+ border: 1px solid black;
14
+ }
15
+
16
+ .flag.selected {
17
+ border: 1px solid black;
18
+ }
19
+ }
20
+
21
+ .f16.flag {
22
+ line-height: 16px;
23
+ }
24
+
25
+ .f24.flag {
26
+ line-height: 24px;
27
+ }
28
+
29
+ .f32.flag {
30
+ line-height: 32px;
31
+ }
32
+
33
+ .f48.flag {
34
+ line-height: 48px;
35
+ }
36
+
37
+ .f64.flag {
38
+ line-height: 64px;
32
39
  }