world-flags 0.2.4 → 0.2.7

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.
data/Gemfile CHANGED
@@ -1,7 +1,5 @@
1
1
  source :rubygems
2
2
 
3
- gem 'httparty'
4
-
5
3
  # Add dependencies to develop your gem here.
6
4
  # Include everything needed to run rake, tests, features, etc.
7
5
  group :development do
@@ -13,5 +11,6 @@ group :development do
13
11
  end
14
12
 
15
13
  group :test do
14
+ gem 'httparty'
16
15
  gem 'rails', '>= 3.1'
17
16
  end
data/README.md CHANGED
@@ -204,7 +204,7 @@ A small helper module is provided that can be inserted into a Controller or wher
204
204
  class MainController < ApplicationController
205
205
  def home
206
206
  @json = Property.all.to_gmaps4rails
207
- @country_code = WorldFlags::Geo.ip_country_code
207
+ @country_code = WorldFlags::Helper::Geo.ip_country_code
208
208
  end
209
209
  end
210
210
  ```
@@ -213,8 +213,8 @@ Alternatively you can include the modules directly into the controller:
213
213
 
214
214
  ```ruby
215
215
  class MainController < ApplicationController
216
- include WorldFlags::Geo
217
- include WorldFlags::Browser
216
+ include WorldFlags::Helper::Geo
217
+ include WorldFlags::Helper::Browser
218
218
 
219
219
  def home
220
220
  @json = Property.all.to_gmaps4rails
@@ -224,17 +224,20 @@ class MainController < ApplicationController
224
224
  end
225
225
  ```
226
226
 
227
- If you include the `WorldFlags::Locale` module, you can simply do:
227
+ If you include the `WorldFlags::Helper::Locale` module, you can simply do:
228
228
 
229
229
  ```ruby
230
230
  before_filter :set_locale
231
231
  ```
232
232
 
233
233
  And it should set the I18n.locale appropriately, trying `params[locale], browser, ip address` in succession, defaulting to `I18n.default_locale`.
234
- For each locale it will check if it is a vaild locale, using
235
- `WorldFlags::Locale#valid_locales`
236
234
 
237
- For convenience you can also include `WorldFlags::All` to include all these modules.
235
+ For each locale it will check if it is a valid locale. By default it will call `valid_locales` in the controller, which will first try `I18n.available_locales` and then fall-back to `WorldFlags#valid_locales`.
236
+ You can override this behavior by defining you custom `valid_locales` method in the controller.
237
+
238
+ For convenience you can include `WorldFlags::Helper::All` to include all these helper modules.
239
+
240
+ Note that if you include the `WorldFlags::Helper::Geo you need the `httparty` gem as well.
238
241
 
239
242
  Example:
240
243
 
@@ -246,13 +249,25 @@ class MainController < ApplicationController
246
249
  end
247
250
  ```
248
251
 
249
- You must set up valid locales for use with WorldFlags in some initializer:
252
+ You can configure valid locales for use with WorldFlags in an initializer, fx `initializers/locales.rb` :
250
253
 
251
254
  ```ruby
252
255
  # fx [:da, :en] or even ['da', 'en']
253
- WorldFlags::Locale.locales = my_valid_locales_list
256
+ WorldFlags.valid_locales = my_valid_locales_list
254
257
  ```
255
258
 
259
+ Note that if not set, this list is preconfigured to: `['en', 'de', 'es', 'ru']`
260
+
261
+ Alternatively configure in your `application.rb` file:
262
+
263
+ ```ruby
264
+ class Application < Rails::Application
265
+ # ...
266
+ config.i18n.available_locales = [:da, :sv, :no]
267
+ ``
268
+
269
+ Note: This approach in turn works well with the `i18n-docs` gem ;)
270
+
256
271
  ## Post flag selection
257
272
 
258
273
  Here an example of setting up a flag click handler in order to call the server with the country/locale/language selection of the flag.
@@ -264,6 +279,8 @@ $("li.flag").click(function() {
264
279
  // full page reload
265
280
  // window.location.href = "/locale/select/" + country;
266
281
 
282
+ // window.location.href = window.location.href + '?locale=' + country;
283
+
267
284
  // async post
268
285
  $.post("/locale/select", { "country": country }, function(data) {
269
286
  console.log(data);
@@ -271,6 +288,23 @@ $("li.flag").click(function() {
271
288
  });
272
289
  ```
273
290
 
291
+ This gem now comes with a simple javascript object `WorldFlagsUrlHelper` baked in. To use it, add the following to your ``application.js manifest.
292
+
293
+ ```
294
+ //= require world_flags/url_helper
295
+ ```
296
+
297
+ And use it something like this:
298
+
299
+ ```javascript
300
+ $("li.flag").click(function() {
301
+ country = $(this).data('locale');
302
+
303
+ // full page reload with locale=xx param added to url :)
304
+ WorldFlagsUrlHelper.reloadWithLocaleParam('da');
305
+ });
306
+ ```
307
+
274
308
  ## Enjoy
275
309
 
276
310
  Copyright (2012) Kristian Mandrup
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.4
1
+ 0.2.7
data/lib/world-flags.rb CHANGED
@@ -1,22 +1,25 @@
1
- require "world_flags/view_helper"
2
- require "world_flags/locale_helper"
1
+ require "world_flags/core_ext"
2
+ require "world_flags/helpers"
3
+
3
4
  require 'world_flags/rails/engine' if defined?(::Rails::Engine)
4
5
 
5
6
  require "world_flags/languages"
6
7
  require "world_flags/countries"
7
8
 
8
- class Hash
9
- def hash_revert
10
- r = Hash.new
11
- each {|k,v| r[v] = k}
12
- r
13
- end
14
- end
15
-
16
9
  module WorldFlags
17
10
  class << self
18
11
  attr_accessor :auto_select
19
12
 
13
+ # for WorldFlags::Helper::Locale
14
+ def valid_locales
15
+ @valid_locales ||= ['en', 'de', 'es', 'ru']
16
+ end
17
+
18
+ def valid_locales= *list
19
+ raise ArgumentError, "Must be a list of locales, was #{list}" if list.empty?
20
+ @valid_locales ||= list.flatten
21
+ end
22
+
20
23
  def auto_select?
21
24
  auto_select
22
25
  end
@@ -0,0 +1,22 @@
1
+ class Hash
2
+ def hash_revert
3
+ r = Hash.new
4
+ each {|k,v| r[v] = k}
5
+ r
6
+ end
7
+ end
8
+
9
+ class Array
10
+ def downcase
11
+ self.map{|e| e.to_s.downcase}
12
+ end
13
+
14
+ def upcase
15
+ self.map{|e| e.to_s.upcase}
16
+ end
17
+
18
+ def select_first_in *list
19
+ list = list.flatten.compact
20
+ self.each {|e| return e if list.include?(e) }
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ module WorldFlags
2
+ module Helper
3
+ module All
4
+ def self.included(base)
5
+ [:Geo, :Browser, :Locale].each do |name|
6
+ base.send :include, "WorldFlags::Helper::#{name}".constantize
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,22 @@
1
+ module WorldFlags
2
+ module Helper
3
+ module Browser
4
+ def self.browser_locale request
5
+ return @browser_locale if @browser_locale
6
+ if lang = request.env["HTTP_ACCEPT_LANGUAGE"]
7
+ lang = lang.split(",").map { |l|
8
+ l += ';q=1.0' unless l =~ /;q=\d+\.\d+$/
9
+ l.split(';q=')
10
+ }.first
11
+ @browser_locale = lang.first.split("-").first
12
+ else
13
+ @browser_locale = I18n.default_locale
14
+ end
15
+ end
16
+
17
+ def browser_locale
18
+ WorldFlags::Helper::Browser.browser_locale(request)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ module WorldFlags
2
+ module Helper
3
+ module Geo
4
+ def self.ip_json
5
+ require "httparty"
6
+
7
+ HTTParty.get('http://freegeoip.net/json/')
8
+ end
9
+
10
+ def self.ip_country_code
11
+ @ip_country_code ||= ip_json.parsed_response['country_code']
12
+ end
13
+
14
+ def ip_country_code
15
+ WorldFlags::Helper::Geo.ip_country_code
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ module WorldFlags
2
+ module Helper
3
+ module Locale
4
+ def set_locale
5
+ I18n.locale = locales.select_first_in(valid_locales.downcase)
6
+ end
7
+
8
+ def valid_locales
9
+ if I18n.respond_to?(:available_locales) && I18n.available_locales.present?
10
+ I18n.available_locales
11
+ else
12
+ WorldFlags.valid_locales
13
+ end
14
+ end
15
+
16
+ def locales
17
+ [params[:locale], browser_locale, ip_country_code, I18n.default_locale].downcase
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,89 @@
1
+ module WorldFlags
2
+ module Helper
3
+ module View
4
+ def self.flag_sizes
5
+ [16, 32, 64]
6
+ end
7
+
8
+ # define more mappings by setting WorldFlags.locale_flag_map to a Hash map
9
+ # http://en.wikipedia.org/wiki/ISO_639-1_language_matrix
10
+ def flag_code code
11
+ WorldFlags.flag_code code
12
+ end
13
+
14
+ def flags_list size = 16, &block
15
+ raise "Missing block" unless block_given?
16
+ unless WorldFlags::Helper::View.flag_sizes.include?(size.to_i)
17
+ raise "Supported sizes are only #{WorldFlags::Helper::View.flag_sizes}"
18
+ end
19
+ content = capture(&block)
20
+ content_tag :ul, content, :class => "f#{size}"
21
+ end
22
+ alias_method :flag_list, :flags_list
23
+
24
+ # http://en.wikipedia.org/wiki/ISO_639-1_language_matrix
25
+
26
+ # should look up translation for each code
27
+ def flags flags_arr, options = {}
28
+ flags_arr.inject("") do |res, elem|
29
+ case elem
30
+ when Array
31
+ code = elem.first
32
+ name = elem.last
33
+ when String, Symbol
34
+ code = elem
35
+ name = WorldFlags.label(code, options)
36
+ else
37
+ raise ArgumentError, "Bad argument: #{flags_arr}, must be Hash or Array"
38
+ end
39
+ res << flag(code, name, options)
40
+ end.html_safe
41
+ end
42
+
43
+ def flags_title flags_arr, options = {}
44
+ flags flags_arr, options.merge(:title => true)
45
+ end
46
+
47
+ def flag code, name, options = {}
48
+ label = case options[:content]
49
+ when true
50
+ name
51
+ when String
52
+ options[:content]
53
+ else
54
+ '&nbsp;'
55
+ end
56
+
57
+ title = case options[:title]
58
+ when true
59
+ name
60
+ when String
61
+ options[:title]
62
+ else
63
+ nil
64
+ end
65
+ locale = WorldFlags.locale(code)
66
+ extra_options = title ? {:title => title } : {}
67
+ selected = flag_selected?(code, options) ? 'selected' : ''
68
+ content_tag :li, label.html_safe, {:class => "flag #{code} #{selected}", :'data-country' => name, :'data-cc' => code, :'data-locale' => locale}.merge(options[:html] || {}).merge(extra_options)
69
+ end
70
+
71
+ def flag_selected? code, options = {}
72
+ code = code.to_sym
73
+ sel = options[:selected] || options[code]
74
+
75
+ auto_sel = flag_code(I18n.locale).to_sym if WorldFlags.auto_select?
76
+
77
+ selected ||= [sel, auto_sel].any?{|e| e == code }
78
+ end
79
+
80
+ def flag_title code, name, options = {}
81
+ flag code, name, options.merge(:title => true)
82
+ end
83
+
84
+ def use_flags size = 16
85
+ stylesheet_link_tag "flags/flags#{size}"
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,8 @@
1
+ require 'world_flags/helper/view'
2
+
3
+ # controller helpers
4
+ require 'world_flags/helper/locale'
5
+ require 'world_flags/helper/browser'
6
+ require 'world_flags/helper/geo'
7
+ require 'world_flags/helper/all'
8
+
@@ -6,7 +6,7 @@ module WorldFlags
6
6
  end
7
7
 
8
8
  def self.add_view_ext
9
- ActionView::Base.send :include, WorldFlags::ViewHelper
9
+ ActionView::Base.send :include, WorldFlags::Helper::View
10
10
  end
11
11
  end
12
12
  end
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe WorldFlags::ViewHelper do
3
+ describe WorldFlags::Helper::View do
4
4
  include ControllerTestHelpers,
5
- WorldFlags::ViewHelper
5
+ WorldFlags::Helper::View
6
6
 
7
7
  it "should be empty, with an empty block" do
8
8
  output = flags_list do
@@ -0,0 +1,48 @@
1
+ // Usage:
2
+ // WorldFlagsUrlHelper.reloadWithLocaleParam('da');
3
+
4
+ var WorldFlagsUrlHelper = {
5
+ reloadWithLocaleParam: function(locale) {
6
+
7
+ // will reload page with 'locale' param added for locale
8
+ // fx www.example.com?locale=da
9
+ // or www.example.com?status=ok&locale=da
10
+ window.location.href = this.addLocaleParameter(window.location.href, locale);
11
+ },
12
+
13
+ addLocaleParameter: function(url, locale) {
14
+ //return this.addParameterToURL(url, 'locale', locale);
15
+ return this.addUrlParameter(url, 'locale', locale, true);
16
+ },
17
+
18
+ // From http://stackoverflow.com/questions/486896/adding-a-parameter-to-the-url-with-javascript
19
+ addUrlParameter: function (sourceUrl, parameterName, parameterValue, replaceDuplicates) {
20
+ if ((sourceUrl == null) || (sourceUrl.length == 0)) sourceUrl = document.location.href;
21
+ var urlParts = sourceUrl.split("?");
22
+ var newQueryString = "";
23
+ if (urlParts.length > 1)
24
+ {
25
+ var parameters = urlParts[1].split("&");
26
+ for (var i=0; (i < parameters.length); i++)
27
+ {
28
+ var parameterParts = parameters[i].split("=");
29
+ if (!(replaceDuplicates && parameterParts[0] == parameterName))
30
+ {
31
+ if (newQueryString == "")
32
+ newQueryString = "?";
33
+ else
34
+ newQueryString += "&";
35
+ newQueryString += parameterParts[0] + "=" + parameterParts[1];
36
+ }
37
+ }
38
+ }
39
+ if (newQueryString == "")
40
+ newQueryString = "?";
41
+ else
42
+ newQueryString += "&";
43
+
44
+ newQueryString += parameterName + "=" + parameterValue;
45
+
46
+ return urlParts[0] + newQueryString;
47
+ }
48
+ }
data/world-flags.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "world-flags"
8
- s.version = "0.2.4"
8
+ s.version = "0.2.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kristian Mandrup"]
12
- s.date = "2012-04-18"
12
+ s.date = "2012-04-26"
13
13
  s.description = "Use world flag icons in your Rails app"
14
14
  s.email = "kmandrup@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -28,11 +28,16 @@ Gem::Specification.new do |s|
28
28
  "VERSION",
29
29
  "app/config/country_codes/iso-3166-2.en.json",
30
30
  "lib/world-flags.rb",
31
+ "lib/world_flags/core_ext.rb",
31
32
  "lib/world_flags/countries.rb",
33
+ "lib/world_flags/helper/all.rb",
34
+ "lib/world_flags/helper/browser.rb",
35
+ "lib/world_flags/helper/geo.rb",
36
+ "lib/world_flags/helper/locale.rb",
37
+ "lib/world_flags/helper/view.rb",
38
+ "lib/world_flags/helpers.rb",
32
39
  "lib/world_flags/languages.rb",
33
- "lib/world_flags/locale_helper.rb",
34
40
  "lib/world_flags/rails/engine.rb",
35
- "lib/world_flags/view_helper.rb",
36
41
  "sandbox/country_codes_table.html",
37
42
  "sandbox/extract_codes.rb",
38
43
  "spec/spec_helper.rb",
@@ -46,6 +51,7 @@ Gem::Specification.new do |s|
46
51
  "vendor/assets/images/flags/flags32_semi.png",
47
52
  "vendor/assets/images/flags/flags64.png",
48
53
  "vendor/assets/images/flags/flags64_semi.png",
54
+ "vendor/assets/javascripts/world_flags/url_helper.js",
49
55
  "vendor/assets/stylesheets/flags/basic.css",
50
56
  "vendor/assets/stylesheets/flags/basic.scss.css",
51
57
  "vendor/assets/stylesheets/flags/flags16-semi.css.erb",
@@ -70,14 +76,12 @@ Gem::Specification.new do |s|
70
76
  s.specification_version = 3
71
77
 
72
78
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
73
- s.add_runtime_dependency(%q<httparty>, [">= 0"])
74
79
  s.add_development_dependency(%q<rspec>, [">= 2.8.0"])
75
80
  s.add_development_dependency(%q<rdoc>, [">= 3.12"])
76
81
  s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
77
82
  s.add_development_dependency(%q<jeweler>, [">= 1.8.3"])
78
83
  s.add_development_dependency(%q<simplecov>, [">= 0.5"])
79
84
  else
80
- s.add_dependency(%q<httparty>, [">= 0"])
81
85
  s.add_dependency(%q<rspec>, [">= 2.8.0"])
82
86
  s.add_dependency(%q<rdoc>, [">= 3.12"])
83
87
  s.add_dependency(%q<bundler>, [">= 1.0.0"])
@@ -85,7 +89,6 @@ Gem::Specification.new do |s|
85
89
  s.add_dependency(%q<simplecov>, [">= 0.5"])
86
90
  end
87
91
  else
88
- s.add_dependency(%q<httparty>, [">= 0"])
89
92
  s.add_dependency(%q<rspec>, [">= 2.8.0"])
90
93
  s.add_dependency(%q<rdoc>, [">= 3.12"])
91
94
  s.add_dependency(%q<bundler>, [">= 1.0.0"])
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: world-flags
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,24 +9,8 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-18 00:00:00.000000000 Z
12
+ date: 2012-04-26 00:00:00.000000000 Z
13
13
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: httparty
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
14
  - !ruby/object:Gem::Dependency
31
15
  name: rspec
32
16
  requirement: !ruby/object:Gem::Requirement
@@ -126,11 +110,16 @@ files:
126
110
  - VERSION
127
111
  - app/config/country_codes/iso-3166-2.en.json
128
112
  - lib/world-flags.rb
113
+ - lib/world_flags/core_ext.rb
129
114
  - lib/world_flags/countries.rb
115
+ - lib/world_flags/helper/all.rb
116
+ - lib/world_flags/helper/browser.rb
117
+ - lib/world_flags/helper/geo.rb
118
+ - lib/world_flags/helper/locale.rb
119
+ - lib/world_flags/helper/view.rb
120
+ - lib/world_flags/helpers.rb
130
121
  - lib/world_flags/languages.rb
131
- - lib/world_flags/locale_helper.rb
132
122
  - lib/world_flags/rails/engine.rb
133
- - lib/world_flags/view_helper.rb
134
123
  - sandbox/country_codes_table.html
135
124
  - sandbox/extract_codes.rb
136
125
  - spec/spec_helper.rb
@@ -144,6 +133,7 @@ files:
144
133
  - vendor/assets/images/flags/flags32_semi.png
145
134
  - vendor/assets/images/flags/flags64.png
146
135
  - vendor/assets/images/flags/flags64_semi.png
136
+ - vendor/assets/javascripts/world_flags/url_helper.js
147
137
  - vendor/assets/stylesheets/flags/basic.css
148
138
  - vendor/assets/stylesheets/flags/basic.scss.css
149
139
  - vendor/assets/stylesheets/flags/flags16-semi.css.erb
@@ -172,7 +162,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
172
162
  version: '0'
173
163
  segments:
174
164
  - 0
175
- hash: 4001890539095180022
165
+ hash: -4369520111429852681
176
166
  required_rubygems_version: !ruby/object:Gem::Requirement
177
167
  none: false
178
168
  requirements:
@@ -1,77 +0,0 @@
1
- require "httparty"
2
-
3
- class Array
4
- def downcase
5
- self.map{|e| e.to_s.downcase}
6
- end
7
-
8
- def upcase
9
- self.map{|e| e.to_s.upcase}
10
- end
11
-
12
- def select_first_in *list
13
- list = list.flatten.compact
14
- self.each {|e| return e if list.include?(e) }
15
- end
16
- end
17
-
18
- module WorldFlags
19
- module Geo
20
- def self.ip_json
21
- HTTParty.get('http://freegeoip.net/json/')
22
- end
23
-
24
- def self.ip_country_code
25
- @ip_country_code ||= ip_json.parsed_response['country_code']
26
- end
27
-
28
- def ip_country_code
29
- WorldFlags::Geo.ip_country_code
30
- end
31
- end
32
-
33
- module Locale
34
- def set_locale
35
- I18n.locale = locales.select_first_in(valid_locales.downcase)
36
- end
37
-
38
- class << self
39
- attr_writer :valid_locales
40
-
41
- def valid_locales
42
- @valid_locales ||= ['en', 'de', 'es', 'ru']
43
- end
44
- end
45
-
46
- def locales
47
- [params[:locale], browser_locale, ip_country_code, I18n.default_locale].downcase
48
- end
49
- end
50
-
51
- module Browser
52
- def self.browser_locale request
53
- return @browser_locale if @browser_locale
54
- if lang = request.env["HTTP_ACCEPT_LANGUAGE"]
55
- lang = lang.split(",").map { |l|
56
- l += ';q=1.0' unless l =~ /;q=\d+\.\d+$/
57
- l.split(';q=')
58
- }.first
59
- @browser_locale = lang.first.split("-").first
60
- else
61
- @browser_locale = I18n.default_locale
62
- end
63
- end
64
-
65
- def browser_locale
66
- WorldFlags::Browser.browser_locale(request)
67
- end
68
- end
69
-
70
- module All
71
- def self.included(base)
72
- base.send :include, Geo
73
- base.send :include, Browser
74
- base.send :include, Locale
75
- end
76
- end
77
- end
@@ -1,81 +0,0 @@
1
- module WorldFlags
2
- module ViewHelper
3
- def self.flag_sizes
4
- [16, 32, 64]
5
- end
6
-
7
- # define more mappings by setting WorldFlags.locale_flag_map to a Hash map
8
- # http://en.wikipedia.org/wiki/ISO_639-1_language_matrix
9
- def flag_code code
10
- WorldFlags.flag_code code
11
- end
12
-
13
- def flags_list size = 16, &block
14
- raise "Missing block" unless block_given?
15
- raise "Supported sizes are only #{WorldFlags::ViewHelper.flag_sizes}" unless WorldFlags::ViewHelper.flag_sizes.include?(size.to_i)
16
- content = capture(&block)
17
- content_tag :ul, content, :class => "f#{size}"
18
- end
19
- alias_method :flag_list, :flags_list
20
-
21
- # http://en.wikipedia.org/wiki/ISO_639-1_language_matrix
22
-
23
- # should look up translation for each code
24
- def flags flags_arr, options = {}
25
- flags_arr.inject("") do |res, elem|
26
- case elem
27
- when Array
28
- code = elem.first
29
- name = elem.last
30
- when String, Symbol
31
- code = elem
32
- name = WorldFlags.label(code, options)
33
- else
34
- raise ArgumentError, "Bad argument: #{flags_arr}, must be Hash or Array"
35
- end
36
- res << flag(code, name, options)
37
- end.html_safe
38
- end
39
-
40
- def flags_title flags_arr, options = {}
41
- flags flags_arr, options.merge(:title => true)
42
- end
43
-
44
- def flag code, name, options = {}
45
- label = case options[:content]
46
- when true
47
- name
48
- when String
49
- options[:content]
50
- else
51
- '&nbsp;'
52
- end
53
-
54
- title = case options[:title]
55
- when true
56
- name
57
- when String
58
- options[:title]
59
- else
60
- nil
61
- end
62
- locale = WorldFlags.locale(code)
63
- extra_options = title ? {:title => title } : {}
64
- selected = flag_selected?(code, options) ? 'selected' : ''
65
- content_tag :li, label.html_safe, {:class => "flag #{code} #{selected}", :'data-country' => name, :'data-cc' => code, :'data-locale' => locale}.merge(options[:html] || {}).merge(extra_options)
66
- end
67
-
68
- def flag_selected? code, options = {}
69
- selected = options[:selected] || options[code.to_sym]
70
- selected ||= (flag_code(I18n.locale.to_sym) == code.to_sym) if WorldFlags.auto_select?
71
- end
72
-
73
- def flag_title code, name, options = {}
74
- flag code, name, options.merge(:title => true)
75
- end
76
-
77
- def use_flags size = 16
78
- stylesheet_link_tag "flags/flags#{size}"
79
- end
80
- end
81
- end