From ad8ddebcdc604173cd4cf7e05c71f9653c634b1e Mon Sep 17 00:00:00 2001 From: Wen-Tien Chang Date: Tue, 23 Sep 2008 00:05:02 +0800 Subject: [PATCH] import from http://github.com/ihower/country_select/ --- README.md | 11 ++++++ init.rb | 1 + lib/country_select.rb | 84 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 README.md create mode 100644 init.rb create mode 100644 lib/country_select.rb diff --git a/README.md b/README.md new file mode 100644 index 0000000..c6d0696 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# Country and region select + +Provides a simple helper to get an HTML select list of countries and regions. +The list of countries comes from [iso-codes package]( http://svn.debian.org/wsvn/pkg-isocodes/trunk/iso-codes/iso_3166/iso_3166.xml?op=file&rev=0&sc=0) + +This plugin is modified from official Rails [Country select plugin](http://github.com/rails/country_select/tree/master) ([why?](http://hlb.yichi.org/blog/2008/09/22/258)) +and licensed under the MIT: http://www.opensource.org/licenses/mit-license.php + +## Example + +country_select("user", "country_name") \ No newline at end of file diff --git a/init.rb b/init.rb new file mode 100644 index 0000000..4568f7b --- /dev/null +++ b/init.rb @@ -0,0 +1 @@ +require 'country_select' \ No newline at end of file diff --git a/lib/country_select.rb b/lib/country_select.rb new file mode 100644 index 0000000..7367382 --- /dev/null +++ b/lib/country_select.rb @@ -0,0 +1,84 @@ +# CountrySelect +module ActionView + module Helpers + module FormOptionsHelper + # Return select and option tags for the given object and method, using country_options_for_select to generate the list of option tags. + def country_select(object, method, priority_countries = nil, options = {}, html_options = {}) + InstanceTag.new(object, method, self, nil, options.delete(:object)).to_country_select_tag(priority_countries, options, html_options) + end + # Returns a string of option tags for pretty much any country in the world. Supply a country name as +selected+ to + # have it marked as the selected option tag. You can also supply an array of countries as +priority_countries+, so + # that they will be listed above the rest of the (long) list. + # + # NOTE: Only the option tags are returned, you have to wrap this call in a regular HTML select tag. + def country_options_for_select(selected = nil, priority_countries = nil) + country_options = "" + + if priority_countries + country_options += options_for_select(priority_countries, selected) + country_options += "\n" + end + + return country_options + options_for_select(COUNTRIES, selected) + end + # All the countries included in the country_options output. + COUNTRIES = ["Afghanistan","Åland Islands","Albania","Algeria","American Samoa","Andorra","Angola", + "Anguilla","Antarctica","Antigua and Barbuda","Argentina","Armenia","Aruba","Australia","Austria", + "Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin", + "Bermuda","Bhutan","Bolivia","Bosnia and Herzegovina","Botswana","Bouvet Island","Brazil", + "British Indian Ocean Territory","Brunei Darussalam","Bulgaria","Burkina Faso","Burundi","Cambodia", + "Cameroon","Canada","Cape Verde","Cayman Islands","Central African Republic","Chad","Chile","China", + "Christmas Island","Cocos (Keeling) Islands","Colombia","Comoros","Congo", + "Congo, The Democratic Republic of the","Cook Islands","Costa Rica","Côte d'Ivoire","Croatia","Cuba", + "Cyprus","Czech Republic","Denmark","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt", + "El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Falkland Islands (Malvinas)", + "Faroe Islands","Fiji","Finland","France","French Guiana","French Polynesia", + "French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea", + "Guinea-Bissau","Guyana","Haiti","Heard Island and McDonald Islands","Holy See (Vatican City State)", + "Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Iran, Islamic Republic of","Iraq", + "Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya", + "Kiribati","Korea, Democratic People's Republic of","Korea, Republic of","Kuwait","Kyrgyzstan", + "Lao People's Democratic Republic","Latvia","Lebanon","Lesotho","Liberia","Libyan Arab Jamahiriya", + "Liechtenstein","Lithuania","Luxembourg","Macao","Macedonia, Republic of", + "Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique", + "Mauritania","Mauritius","Mayotte","Mexico","Micronesia, Federated States of","Moldova", + "Monaco","Mongolia","Montenegro","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru", + "Nepal","Netherlands","Netherlands Antilles","New Caledonia","New Zealand","Nicaragua","Niger", + "Nigeria","Niue","Norfolk Island","Northern Mariana Islands","Norway","Oman","Pakistan","Palau", + "Palestinian Territory, Occupied","Panama","Papua New Guinea","Paraguay","Peru","Philippines", + "Pitcairn","Poland","Portugal","Puerto Rico","Qatar","Reunion","Romania","Russian Federation", + "Rwanda","Saint Barthélemy","Saint Helena","Saint Kitts and Nevis","Saint Lucia", + "Saint Martin (French part)","Saint Pierre and Miquelon","Saint Vincent and the Grenadines","Samoa","San Marino", + "Sao Tome and Principe","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra Leone","Singapore", + "Slovakia","Slovenia","Solomon Islands","Somalia","South Africa", + "South Georgia and the South Sandwich Islands","Spain","Sri Lanka","Sudan","Suriname", + "Svalbard and Jan Mayen","Swaziland","Sweden","Switzerland","Syrian Arab Republic", + "Taiwan","Tajikistan","Tanzania, United Republic of","Thailand","Timor-Leste", + "Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey","Turkmenistan", + "Turks and Caicos Islands","Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom", + "United States","United States Minor Outlying Islands","Uruguay","Uzbekistan","Vanuatu","Venezuela", + "Viet Nam","Virgin Islands, British","Virgin Islands, U.S.","Wallis and Futuna","Western Sahara", + "Yemen","Zambia","Zimbabwe"] unless const_defined?("COUNTRIES") && Rails::VERSION::STRING >= '2.2.0' + end + + class InstanceTag + def to_country_select_tag(priority_countries, options, html_options) + html_options = html_options.stringify_keys + add_default_name_and_id(html_options) + value = value(object) + content_tag("select", + add_options( + country_options_for_select(value, priority_countries), + options, value + ), html_options + ) + end + end + + class FormBuilder + def country_select(method, priority_countries = nil, options = {}, html_options = {}) + @template.country_select(@object_name, method, priority_countries, options.merge(:object => @object), html_options) + end + end + end +end \ No newline at end of file