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 +1 -2
 - data/README.md +43 -9
 - data/VERSION +1 -1
 - data/lib/world-flags.rb +13 -10
 - data/lib/world_flags/core_ext.rb +22 -0
 - data/lib/world_flags/helper/all.rb +11 -0
 - data/lib/world_flags/helper/browser.rb +22 -0
 - data/lib/world_flags/helper/geo.rb +19 -0
 - data/lib/world_flags/helper/locale.rb +21 -0
 - data/lib/world_flags/helper/view.rb +89 -0
 - data/lib/world_flags/helpers.rb +8 -0
 - data/lib/world_flags/rails/engine.rb +1 -1
 - data/spec/world_flags/view_helper_spec.rb +2 -2
 - data/vendor/assets/javascripts/world_flags/url_helper.js +48 -0
 - data/world-flags.gemspec +10 -7
 - metadata +11 -21
 - data/lib/world_flags/locale_helper.rb +0 -77
 - data/lib/world_flags/view_helper.rb +0 -81
 
    
        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  
     | 
| 
      
 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  
     | 
| 
      
 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 
     | 
| 
      
 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. 
     | 
| 
      
 1 
     | 
    
         
            +
            0.2.7
         
     | 
    
        data/lib/world-flags.rb
    CHANGED
    
    | 
         @@ -1,22 +1,25 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require "world_flags/ 
     | 
| 
       2 
     | 
    
         
            -
            require "world_flags/ 
     | 
| 
      
 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,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 
     | 
    
         
            +
            					' '
         
     | 
| 
      
 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,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. 
     | 
| 
      
 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- 
     | 
| 
      
 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 
     | 
    
         
            +
              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- 
     | 
| 
      
 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:  
     | 
| 
      
 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 
     | 
    
         
            -
            				' '
         
     | 
| 
       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
         
     |