district_cn_selector 1.0.0

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.
Files changed (86) hide show
  1. data/.gitignore +27 -0
  2. data/.rspec +1 -0
  3. data/.travis.yml +14 -0
  4. data/Gemfile +37 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +138 -0
  7. data/Rakefile +21 -0
  8. data/config/routes.rb +7 -0
  9. data/district_cn_selector.gemspec +27 -0
  10. data/lib/district_cn_selector.rb +22 -0
  11. data/lib/district_cn_selector/district_controller.rb +26 -0
  12. data/lib/district_cn_selector/district_select_helper.rb +46 -0
  13. data/lib/district_cn_selector/district_select_ul_helper.rb +48 -0
  14. data/lib/district_cn_selector/engine.rb +22 -0
  15. data/lib/district_cn_selector/helpers/form_builder.rb +13 -0
  16. data/lib/district_cn_selector/helpers/form_builder_extension.rb +49 -0
  17. data/lib/district_cn_selector/hooks/simple_form.rb +72 -0
  18. data/lib/district_cn_selector/selector.rb +202 -0
  19. data/lib/district_cn_selector/theme.rb +19 -0
  20. data/lib/district_cn_selector/version.rb +3 -0
  21. data/spec/controllers/district_cn_selector/district_controller_spec.rb +13 -0
  22. data/spec/dummy/README.rdoc +261 -0
  23. data/spec/dummy/Rakefile +7 -0
  24. data/spec/dummy/app/assets/javascripts/application.js +5 -0
  25. data/spec/dummy/app/assets/stylesheets/application.css.scss +31 -0
  26. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  27. data/spec/dummy/app/controllers/home_controller.rb +7 -0
  28. data/spec/dummy/app/controllers/tests_controller.rb +10 -0
  29. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  30. data/spec/dummy/app/mailers/.gitkeep +0 -0
  31. data/spec/dummy/app/models/company.rb +8 -0
  32. data/spec/dummy/app/views/home/index.html.erb +31 -0
  33. data/spec/dummy/app/views/home/select2_backup.html.erb +49 -0
  34. data/spec/dummy/app/views/layouts/application.html.erb +15 -0
  35. data/spec/dummy/app/views/tests/1.html.erb +8 -0
  36. data/spec/dummy/app/views/tests/2.html.erb +9 -0
  37. data/spec/dummy/app/views/tests/3.html.erb +7 -0
  38. data/spec/dummy/app/views/tests/4.html.erb +7 -0
  39. data/spec/dummy/app/views/tests/5.html.erb +7 -0
  40. data/spec/dummy/app/views/tests/6.html.erb +7 -0
  41. data/spec/dummy/config.ru +4 -0
  42. data/spec/dummy/config/application.rb +75 -0
  43. data/spec/dummy/config/boot.rb +10 -0
  44. data/spec/dummy/config/database.yml +16 -0
  45. data/spec/dummy/config/environment.rb +5 -0
  46. data/spec/dummy/config/environments/development.rb +37 -0
  47. data/spec/dummy/config/environments/production.rb +67 -0
  48. data/spec/dummy/config/environments/test.rb +37 -0
  49. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  50. data/spec/dummy/config/initializers/inflections.rb +15 -0
  51. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  52. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  53. data/spec/dummy/config/initializers/session_store.rb +8 -0
  54. data/spec/dummy/config/initializers/simple_form.rb +142 -0
  55. data/spec/dummy/config/initializers/simple_form_bootstrap.rb +45 -0
  56. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  57. data/spec/dummy/config/locales/active_record.zh-CN.yml +11 -0
  58. data/spec/dummy/config/locales/en.yml +5 -0
  59. data/spec/dummy/config/locales/simple_form.en.yml +26 -0
  60. data/spec/dummy/config/routes.rb +5 -0
  61. data/spec/dummy/db/migrate/20130717055253_create_companies.rb +10 -0
  62. data/spec/dummy/db/schema.rb +24 -0
  63. data/spec/dummy/lib/assets/.gitkeep +0 -0
  64. data/spec/dummy/log/.gitkeep +0 -0
  65. data/spec/dummy/public/404.html +26 -0
  66. data/spec/dummy/public/422.html +26 -0
  67. data/spec/dummy/public/500.html +25 -0
  68. data/spec/dummy/public/area_select_cn/area-bg1.jpg +0 -0
  69. data/spec/dummy/public/area_select_cn/area-bg2.jpg +0 -0
  70. data/spec/dummy/public/favicon.ico +0 -0
  71. data/spec/dummy/script/rails +6 -0
  72. data/spec/factories/.gitkeep +0 -0
  73. data/spec/features/visit_testpage_spec.rb +93 -0
  74. data/spec/helpers/form_spec.rb +106 -0
  75. data/spec/helpers/simple_form_spec.rb +101 -0
  76. data/spec/spec_helper.rb +48 -0
  77. data/spec/support/mock_controller.rb +22 -0
  78. data/spec/support/view_test_helper.rb +29 -0
  79. data/vendor/assets/images/district_cn_selector/area-bg1.jpg +0 -0
  80. data/vendor/assets/images/district_cn_selector/area-bg2.jpg +0 -0
  81. data/vendor/assets/images/district_cn_selector/bootstrap-theme.png +0 -0
  82. data/vendor/assets/images/district_cn_selector/default-theme.png +0 -0
  83. data/vendor/assets/javascripts/district_cn_selector/jquery.district-ul.js +224 -0
  84. data/vendor/assets/javascripts/district_cn_selector/jquery.district.js +119 -0
  85. data/vendor/assets/stylesheets/district_cn_selector/district-ul.css +93 -0
  86. metadata +269 -0
@@ -0,0 +1,27 @@
1
+ # See http://help.github.com/ignore-files/ for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile ~/.gitignore_global
6
+
7
+ # Ignore bundler config
8
+ /.bundle
9
+
10
+ # Ignore the default SQLite database.
11
+ *.sqlite3
12
+
13
+ # Ignore all logfiles and tempfiles.
14
+ /log/*.log
15
+ /tmp
16
+ /public/assets
17
+ /public/uploads
18
+ /public/uploads/*.*
19
+ /config/database.yml
20
+ *.swp
21
+ .DS_Store
22
+ .DS_Store?
23
+ Gemfile.lock
24
+ /doc/TODO
25
+ /spec/dummy/log/*.log
26
+ /spec/dummy/tmp/
27
+ /.idea
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --drb --color -f n
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+
3
+ before_install:
4
+ - gem install bundler
5
+
6
+ gemfile:
7
+ - Gemfile
8
+
9
+ rvm:
10
+ - 1.9.3
11
+ - 2.0.0
12
+
13
+ script:
14
+ - bundle exec rake spec
data/Gemfile ADDED
@@ -0,0 +1,37 @@
1
+ source 'http://ruby.taobao.org/'
2
+
3
+ # Declare your gem's dependencies in area_select_cn.gemspec.
4
+ # Bundler will treat runtime dependencies like base dependencies, and
5
+ # development dependencies will be added by default to the :development group.
6
+ gemspec
7
+
8
+ # jquery-rails is used by the dummy application
9
+ gem "sqlite3"
10
+ group :development, :test do
11
+ gem "rspec-rails"
12
+ gem "capybara"
13
+ gem "capybara-webkit"
14
+ gem "factory_girl_rails"
15
+ end
16
+
17
+ gem 'therubyracer'
18
+ gem 'uglifier', '>= 1.0.3'
19
+
20
+ gem 'jquery-rails'
21
+ gem 'sass-rails', '~> 3.2.3'
22
+ gem 'less-rails'
23
+ gem 'bootstrap-sass'
24
+ gem 'font-awesome-rails'
25
+ gem 'simple_form'
26
+
27
+
28
+ #gem 'select2-rails'
29
+ #gem 'snap_js-rails'
30
+
31
+ # Declare any dependencies that are still in development here instead of in
32
+ # your gemspec. These might include edge Rails or gems from your path or
33
+ # Git. Remember to move these dependencies to your gemspec before releasing
34
+ # your gem to rubygems.org.
35
+
36
+ # To use debugger
37
+ # gem 'debugger'
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 kehao.qiu
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,138 @@
1
+ [![Gem Version](https://badge.fury.io/rb/district_cn_selector.png)](http://badge.fury.io/rb/district_cn_selector)
2
+ ## 地区选择插件(测试中)
3
+ 三级联动地区选择器:
4
+
5
+ 1. select-ul 模拟下拉菜单
6
+ 2. select 下拉菜单(done,testing)
7
+
8
+ ## Example
9
+ [Online Demo](http://112.124.38.145:9292).
10
+
11
+ ##Features
12
+ 1. 支持bootstrap
13
+ 2. 支持simple_form
14
+ 3. 支持select和select-ul
15
+ 4. 基于[district_cn](https://github.com/Kehao/district_cn),有一些实用的方法
16
+
17
+ ##Installation
18
+ Add it to your Gemfile:
19
+ ```ruby
20
+ gem 'district_cn_selector'
21
+ ```
22
+
23
+ And then execute:
24
+ ```console
25
+ bundle install
26
+ ```
27
+
28
+ Add it to your application.js:
29
+
30
+ ```console
31
+ // select
32
+ //= require district_cn_selector/jquery.district
33
+ // select-ul
34
+ //= require district_cn_selector/jquery.district-ul
35
+ ```
36
+
37
+ if you want to use the default theme, add it to your application.css:
38
+ ```console
39
+ *= require district_cn_selector/district-ul
40
+ ```
41
+
42
+ ## FormHelper
43
+ ###form_tag
44
+ ```erb
45
+
46
+ <%= form_tag "" do %>
47
+ <!-- select -->
48
+ <%= district_select(:company,:region_code,"331000") %>
49
+
50
+ <!-- select-ul -->
51
+ <%= district_select_ul(:company,:region_code,"331000") %>
52
+ <% end %>
53
+ ```
54
+
55
+ ###form_for
56
+ ```erb
57
+ <%= form_for Company.new,:builder => DistrictCnSelector::Helpers::FormBuilder do |f| %>
58
+ <!-- select -->
59
+ <%= f.district_select :region_code%>
60
+
61
+ <!-- select-ul -->
62
+ <%= f.district_select_ul :region_code%>
63
+ <%end%>
64
+ ```
65
+
66
+ ###simple_form_for
67
+ ```erb
68
+ <%= simple_form_for Company.new,:html => { :class => 'form-horizontal' } do |f| %>
69
+ <!-- select -->
70
+ <%= f.input :region_code,:as => :district_select %>
71
+
72
+ <!-- select-ul -->
73
+ <%= f.input :region_code,:as => :district_select_ul %>
74
+ <% end %>
75
+ ```
76
+
77
+ ###province,city,district select helper
78
+ ```erb
79
+ <!-- select,select-ul适用 -->
80
+ <!-- form_tag -->
81
+ <%= district_select_ul(:company,:region_code,"331000") %>
82
+ <%= city_select_ul(:company,:region_code,"331000") %>
83
+ <%= province_select_ul(:company,:region_code,"331000") %>
84
+
85
+ <!-- form_for -->
86
+ <%= f.district_select_ul :region_code %>
87
+ <%= f.city_select_ul :region_code %>
88
+ <%= f.province_select_ul :region_code %>
89
+
90
+ <!-- simple_form_for -->
91
+ <%= f.input :region_code,:as => :district_select_ul %>
92
+ <%= f.input :region_code,:as => :city_select_ul %>
93
+ <%= f.input :region_code,:as => :province_select_ul %>
94
+ ```
95
+
96
+ ##Theme(select-ul适用)
97
+ 1. default
98
+ 2. bootstrap
99
+
100
+ if you want to use the default theme, add it to your application.css:
101
+ ```console
102
+ *= require district_cn_selector/district-ul
103
+ ```
104
+ if you want to use bootstrap theme, you should import bootstrap css.
105
+
106
+ ```erb
107
+ <!-- form_tag -->
108
+ <%= district_select_ul(:company,:region_code,"331000",:theme=>:bootstrap) %>
109
+
110
+ <!-- form_for -->
111
+ <%= f.district_select_ul :region_code,:theme=>:bootstrap,:prompt_class=>"btn btn-success"%>
112
+
113
+ <!-- simple_form_for,如果SimpleForm.wrapper等于:bootstrap,默认样式为:bootstrap -->
114
+ <%= f.input :region_code,:as => :district_select_ul %>
115
+ ```
116
+ ## Test
117
+ ``` ruby
118
+ rake spec
119
+ ```
120
+ ## Resources
121
+ * Chosen(http://harvesthq.github.io/chosen/)
122
+ * X-editable(http://vitalets.github.io/x-editable/demo.html)
123
+ * Jquery-addresspicker(http://xilinus.com/jquery-addresspicker/demos/index.html)
124
+ * Jquery-Autocomplete(https://github.com/devbridge/jQuery-Autocomplete)
125
+ * Jquery-tokeninput(https://github.com/loopj/jquery-tokeninput)
126
+ * Jquery-ui(http://jqueryui.com/autocomplete/)
127
+ * Select2(http://ivaynberg.github.io/select2/)
128
+ * typeahead.js(https://github.com/twitter/typeahead.js/)
129
+
130
+
131
+ ##Contributing
132
+
133
+ 1. Fork it
134
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
135
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
136
+ 4. Push to the branch (`git push origin my-new-feature`)
137
+ 5. Create new Pull Request
138
+
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+
8
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
9
+ load 'rails/tasks/engine.rake'
10
+
11
+ Bundler::GemHelper.install_tasks
12
+
13
+ Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
14
+
15
+ require 'rspec/core'
16
+ require 'rspec/core/rake_task'
17
+
18
+ desc "Run all specs in spec directory (excluding plugin specs)"
19
+ RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
20
+ task :default => :spec
21
+
@@ -0,0 +1,7 @@
1
+ Rails.application.routes.draw do
2
+ # 返回树状结构的省,市,区县数据
3
+ get '/district_cn_selector/district',
4
+ :to => DistrictCnSelector::DistrictController.action(:index)
5
+ get '/district_cn_selector/district/search',
6
+ :to => DistrictCnSelector::DistrictController.action(:search)
7
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'district_cn_selector/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "district_cn_selector"
8
+ spec.version = DistrictCnSelector::VERSION
9
+ spec.authors = ["kehao"]
10
+ spec.email = ["kehao.qiu@gmail.com"]
11
+ spec.description = %q{三级联动地区选择器}
12
+ spec.summary = %q{三级联动地区选择器}
13
+ #spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+
24
+ spec.add_dependency "rails", ">= 3.2.6"
25
+ spec.add_dependency "jquery-rails"
26
+ spec.add_dependency "district_cn",">= 1.0.2"
27
+ end
@@ -0,0 +1,22 @@
1
+ require "district_cn"
2
+ require "district_cn_selector/engine"
3
+
4
+ module DistrictCnSelector
5
+ autoload :Theme, 'district_cn_selector/theme'
6
+ autoload :DistrictController, 'district_cn_selector/district_controller'
7
+
8
+ module Helpers
9
+ autoload :FormBuilderExtension, 'district_cn_selector/helpers/form_builder_extension'
10
+ autoload :FormBuilder, 'district_cn_selector/helpers/form_builder'
11
+ end
12
+
13
+ begin
14
+ require 'simple_form'
15
+ require 'district_cn_selector/hooks/simple_form'
16
+ rescue LoadError
17
+ end
18
+
19
+ require 'district_cn_selector/selector'
20
+ require 'district_cn_selector/district_select_ul_helper'
21
+ require 'district_cn_selector/district_select_helper'
22
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+ module DistrictCnSelector
3
+ class DistrictController < ActionController::Base
4
+ layout nil
5
+ # 返回树状结构的整个省份,城市,区域列表,
6
+ # 避免选择地区时的多次请求
7
+ def index
8
+ code = params[:region_code]
9
+ results =
10
+ if code
11
+ DistrictCn.code(code).children
12
+ else
13
+ DistrictCn.tree
14
+ end
15
+ render :json => results
16
+ end
17
+
18
+ def search
19
+ ids = []
20
+ if params[:region_name]
21
+ ids = DistrictCn.search(params[:region_name])
22
+ end
23
+ render :json => ids.map{|id|{:id=>id.code,:text=>id.area_name}}
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+ module ActionView
3
+ module Helpers
4
+ module FormOptionsHelper
5
+ def district_select(object, method, region_code=nil, options={}, html_options={})
6
+ tag = InstanceTag.new(object, method, self, options.delete(:object))
7
+ tag.to_district_select_tag(region_code, options, html_options)
8
+ end
9
+ alias_method :area_select, :district_select
10
+
11
+ def city_select(object, method, region_code=nil, options={}, html_options={})
12
+ tag = InstanceTag.new(object, method, self, options.delete(:object))
13
+ tag.to_city_select_tag(region_code, options, html_options)
14
+ end
15
+
16
+ def province_select(object, method, region_code=nil, options={}, html_options={})
17
+ tag = InstanceTag.new(object, method, self, options.delete(:object))
18
+ tag.to_province_select_tag(region_code, options, html_options)
19
+ end
20
+ end
21
+
22
+ module SelectHelperInstanceTag
23
+ def to_district_select_tag(region_code=nil, options={}, html_options={})
24
+ district_selector(region_code, options, html_options).to_select(:district)
25
+ end
26
+
27
+ def to_city_select_tag(region_code=nil,options={}, html_options={})
28
+ district_selector(region_code, options, html_options).to_select(:city)
29
+ end
30
+
31
+ def to_province_select_tag(region_code=nil,options={}, html_options={})
32
+ district_selector(region_code, options, html_options).to_select(:province)
33
+ end
34
+
35
+ private
36
+ def district_selector(region_code,options, html_options)
37
+ DistrictCnSelector::SelectSelector.new(self, region_code, options, html_options)
38
+ end
39
+ end
40
+
41
+ class InstanceTag #:nodoc:
42
+ include SelectHelperInstanceTag
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+ module ActionView
3
+ module Helpers
4
+ module FormOptionsHelper
5
+ def district_select_ul(object, method, region_code=nil, options={}, html_options={})
6
+ tag = InstanceTag.new(object, method, self, options.delete(:object))
7
+ tag.to_district_select_ul_tag(region_code, options, html_options)
8
+ end
9
+
10
+ alias_method :area_select_ul, :district_select_ul
11
+
12
+ def city_select_ul(object, method, region_code=nil, options={}, html_options={})
13
+ tag = InstanceTag.new(object, method, self, options.delete(:object))
14
+ tag.to_city_select_ul_tag(region_code, options, html_options)
15
+ end
16
+
17
+ def province_select_ul(object, method, region_code=nil, options={}, html_options={})
18
+ tag = InstanceTag.new(object, method, self, options.delete(:object))
19
+ tag.to_province_select_ul_tag(region_code, options, html_options)
20
+ end
21
+ end
22
+
23
+ module SelectUlHelperInstanceTag
24
+ def to_district_select_ul_tag(region_code=nil,options={}, html_options={})
25
+ district_ul_selector(region_code, options, html_options).to_select(:district)
26
+ end
27
+
28
+ def to_city_select_ul_tag(region_code=nil,options={}, html_options={})
29
+ district_ul_selector(region_code, options, html_options).to_select(:city)
30
+ end
31
+
32
+ def to_province_select_ul_tag(region_code=nil,options={}, html_options={})
33
+ district_ul_selector(region_code, options, html_options).to_select(:province)
34
+ end
35
+
36
+ private
37
+ def district_ul_selector(region_code,options, html_options)
38
+ DistrictCnSelector::SelectUlSelector.new(self, region_code, options, html_options)
39
+ end
40
+ end
41
+
42
+ class InstanceTag #:nodoc:
43
+ include SelectUlHelperInstanceTag
44
+ end
45
+
46
+ end
47
+ end
48
+