spree_counties 3.0.1 → 3.0.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7cf4050d9bc0bdc13816724a74131104f7b0158a
4
- data.tar.gz: 557a52a8af1d88e4683ebd1c1f3ad5247cfb6fd7
3
+ metadata.gz: bf5a39f6e609a2a1690d28637ad712e89830d092
4
+ data.tar.gz: a4526e64c8460d0d9acd74ac0b35f499e8a66a69
5
5
  SHA512:
6
- metadata.gz: 9e4346678663c5c03330d04338f3c69b46853e1187ed44b9c5f94975cf5d91ea195b689425e1f7ca507972d14ded516d29c77c5e9314da2c9addb9296fa644a1
7
- data.tar.gz: 430f211168dffbe87702fbf79fb99b1d3dd434092e3bec5301b167286f92a6b7eef5e390d9679be24f74a4260ab49484b866dd8a3e19d23b65bacba077f6d2bc
6
+ metadata.gz: c99386874d6bb93be2cef1d37d23cb57147e7f252c93a25245fe105a03b1fcb5851e02284b68287070c6220ed058af3432c41fbcc4cf16a702edb580864419a4
7
+ data.tar.gz: 860119620644d0559493e169edd76260b32454652ec8031e6de3c78eaa8eecca3fb448348fcb469f0e1d164456a40b2501f21f5c49437bb0b153780af828e6cf
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ spree_counties
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.2.1
data/Gemfile CHANGED
@@ -1,7 +1,15 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'spree', github: 'spree/spree', branch: '2-3-stable'
3
+ gem 'spree', github: 'spree/spree', branch: '3-0-stable'
4
4
  # Provides basic authentication functionality for testing parts of your engine
5
- gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: '2-3-stable'
5
+ gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: '3-0-stable'
6
6
 
7
7
  gemspec
8
+
9
+ group :development do
10
+ gem 'better_errors'
11
+ gem 'binding_of_caller'
12
+ gem 'pry'
13
+
14
+ gem 'spreadsheet'
15
+ end
data/README.md CHANGED
@@ -23,6 +23,11 @@ bundle
23
23
  bundle exec rails g spree_counties:install
24
24
  ```
25
25
 
26
+ Documentation
27
+ -------------
28
+
29
+ Pay atention to Spree::Address#require_county? method if you want validation in county fields
30
+
26
31
  Testing
27
32
  -------
28
33
 
@@ -1,58 +1,84 @@
1
1
  Spree.ready ($) ->
2
- ($ '#bstate select').change ->
3
- updateCounty 'b'
4
-
5
- ($ '#sstate select').change ->
6
- updateCounty 's'
7
-
8
- updateCounty = (region) ->
9
- stateId = getStateId(region)
10
- if stateId?
11
- $.get '/api/counties', {state_id: stateId}, (data) ->
12
- Spree.Checkout[stateId] =
13
- counties: data.counties
14
- fillCounties(Spree.Checkout[stateId], region)
15
-
16
- getStateId = (region) ->
17
- $('#' + region + 'state select').val()
18
-
19
- fillCounties = (data, region) ->
20
- countiesRequired = true
21
- counties = data.counties
22
-
23
- countyPara = ($ '#' + region + 'county')
24
- countySelect = countyPara.find('select')
25
- countyInput = countyPara.find('input')
26
- countySpanRequired = countyPara.find('county-required')
27
- if counties.length > 0
28
- selected = parseInt countySelect.val()
29
- countySelect.html ''
30
- countyWithBlank = [{ name: '', id: ''}].concat(counties)
31
- $.each countyWithBlank, (idx, county) ->
32
- opt = ($ document.createElement('option')).attr('value', county.id).html(county.name)
33
- opt.prop 'selected', true if selected is county.id
34
- countySelect.append opt
35
-
36
- countySelect.prop('disabled', false).show()
37
- countyInput.hide().prop 'disabled', true
38
- countyPara.show()
39
- countySpanRequired.show()
40
- countySelect.addClass('required') if countiesRequired
41
- countySelect.removeClass('hidden')
42
- countyInput.removeClass('required')
43
- else
44
- countySelect.hide().prop 'disabled', true
45
- countyInput.show()
46
- if countiesRequired
47
- countySpanRequired.show()
48
- countyInput.addClass('required')
2
+ if ($ '#checkout_form_address').is('*')
3
+ getStateId = (region) ->
4
+ $('#' + region + 'state select:visible').val()
5
+
6
+ Spree.updateCounty = (region) ->
7
+ stateId = getStateId(region)
8
+ if stateId? and stateId
9
+ unless Spree.Checkout[stateId]?
10
+ $.get '/api/counties', {state_id: stateId}, (data) ->
11
+ Spree.Checkout[stateId] =
12
+ counties: data.counties
13
+ counties_required: false #data.counties_required
14
+ Spree.fillCounties(Spree.Checkout[stateId], region)
15
+ else
16
+ Spree.fillCounties(Spree.Checkout[stateId], region)
17
+
49
18
  else
50
- countyInput.val ''
51
- countySpanRequired.hide()
19
+ countyPara = ($ '#' + region + 'county')
20
+ countySelect = countyPara.find('select')
21
+ countyInput = countyPara.find('input')
22
+
23
+ countyPara.hide()
24
+ countySelect.hide().prop('disabled', true).val('')
25
+ countyInput.hide().prop('disabled', true).val('')
26
+
27
+ Spree.fillCounties = (data, region) ->
28
+ countiesRequired = data.counties_required
29
+ counties = data.counties
30
+
31
+ countyPara = ($ '#' + region + 'county')
32
+ countySelect = countyPara.find('select')
33
+ countyInput = countyPara.find('input')
34
+ countySpanRequired = countyPara.find('[id$="county-required"]')
35
+ if counties.length > 0
36
+ selected = parseInt countySelect.val()
37
+ countySelect.html ''
38
+ countyWithBlank = [{ name: '', id: ''}].concat(counties)
39
+ $.each countyWithBlank, (idx, county) ->
40
+ opt = ($ document.createElement('option')).attr('value', county.id).html(county.name)
41
+ opt.prop 'selected', true if selected is county.id
42
+ countySelect.append opt
43
+
44
+ countySelect.prop('disabled', false).show()
45
+ countyInput.hide().prop('disabled', true).val('')
46
+ countyPara.show()
47
+ countySpanRequired.show()
48
+ countySelect.addClass('required') if countiesRequired
49
+ countySelect.removeClass('hidden')
52
50
  countyInput.removeClass('required')
53
- countyPara.toggle(!!countiesRequired)
54
- countyInput.prop('disabled', !countiesRequired)
55
- countyInput.removeClass('hidden')
56
- countySelect.removeClass('required')
51
+ else
52
+ countySelect.hide().prop('disabled', true).val('')
53
+ countyInput.show()
54
+ if countiesRequired
55
+ countySpanRequired.show()
56
+ countyInput.addClass('required')
57
+ else
58
+ countyInput.val ''
59
+ countySpanRequired.hide()
60
+ countyInput.removeClass('required')
61
+ countyPara.toggle(!!countiesRequired)
62
+ countyInput.prop('disabled', !countiesRequired)
63
+ countyInput.removeClass('hidden')
64
+ countySelect.removeClass('required')
65
+
66
+ $(document).on 'change', '#bstate select', ->
67
+ Spree.updateCounty 'b'
68
+
69
+ $(document).on 'change', '#sstate select', ->
70
+ Spree.updateCounty 's'
71
+
72
+ $(document).on 'change', '#bcountry select', ->
73
+ Spree.updateCounty 'b'
74
+
75
+ $(document).on 'change', '#scountry select', ->
76
+ Spree.updateCounty 's'
77
+
78
+ Spree.updateCounty 'b'
79
+
57
80
 
58
- updateCounty 'b'
81
+ window.fillStatesOld = Spree.fillStates
82
+ Spree.fillStates = (data, region) ->
83
+ fillStatesOld(data, region)
84
+ Spree.updateCounty(region)
@@ -1,7 +1,67 @@
1
1
  module Spree
2
2
  Address.class_eval do
3
- belongs_to :county, class_name: "Spree::County"
4
3
  Spree::PermittedAttributes.address_attributes << :county_id
5
4
  Spree::PermittedAttributes.address_attributes << :county_name
5
+
6
+ before_validation :ensure_state_country_dependency
7
+ before_validation :ensure_county_state_dependency
8
+
9
+ belongs_to :county, class_name: "Spree::County"
10
+ validate :county_validate
11
+
12
+ def require_county?
13
+ false
14
+ end
15
+
16
+ private
17
+ def county_validate
18
+ # Skip state validation without state
19
+ return if state.blank?
20
+ return if !require_county?
21
+
22
+ # ensure associated county belongs to state
23
+ if county.present?
24
+ if county.state == state
25
+ self.county_name = nil #not required as we have a valid county and state combo
26
+ else
27
+ if county_name.present?
28
+ self.county = nil
29
+ else
30
+ errors.add(:county, :invalid)
31
+ end
32
+ end
33
+ end
34
+
35
+ # ensure county_name belongs to state without counties, or that it matches a predefined state name
36
+ if county_name.present?
37
+ if state.counties.present?
38
+ counties = state.counties.find_all_by_name(county_name)
39
+
40
+ if counties.size == 1
41
+ self.county = counties.first
42
+ self.county_name = nil
43
+ else
44
+ errors.add(:state, :invalid)
45
+ end
46
+ end
47
+ end
48
+
49
+ # ensure at least one county field is populated
50
+ errors.add :county, :blank if county.blank? && county_name.blank?
51
+ end
52
+
53
+ # ensure associated state belongs to country
54
+ def ensure_state_country_dependency
55
+ unless Spree::State.where(country_id: self.country_id).exists?(id: self.state_id)
56
+ self.state_id = nil
57
+ end
58
+ end
59
+
60
+ # ensure associated county belongs to state
61
+ def ensure_county_state_dependency
62
+ unless Spree::County.where(state_id: self.state_id).exists?(id: self.county_id)
63
+ self.county_id = nil
64
+ end
65
+ end
6
66
  end
7
- end
67
+ end
@@ -1,6 +1,7 @@
1
1
  class Spree::County < ActiveRecord::Base
2
2
  belongs_to :state
3
3
  has_many :addresses, dependent: :nullify
4
+ validates :name, presence: true
4
5
  Spree::Ability.register_ability(CountyAbility)
5
6
 
6
7
  def <=>(other)
@@ -0,0 +1,53 @@
1
+ <!-- replace_contents "erb[silent]:contains('Spree::Config[:address_requires_state]')" closing_selector "erb[silent]:contains('end')" -->
2
+ <p class="form-group" id=<%="#{address_id}state" %>>
3
+ <% have_states = !address.country.states.empty? %>
4
+ <%= form.label :state do %>
5
+ <%= Spree.t(:state) %><abbr class='required' title="required" id=<%="#{address_id}state-required"%>>*</abbr>
6
+ <% end %>
7
+
8
+ <% state_elements = [
9
+ form.collection_select(:state_id, address.country.states,
10
+ :id, :name,
11
+ {:include_blank => true},
12
+ {:class => have_states ? 'form-control required' : 'form-control hidden',
13
+ :disabled => !have_states}) +
14
+ form.text_field(:state_name,
15
+ :class => !have_states ? 'form-control required' : 'form-control hidden',
16
+ :disabled => have_states)
17
+ ].join.gsub('"', "'").gsub("\n", "")
18
+ %>
19
+ <%= javascript_tag do %>
20
+ $('#<%="#{address_id}state" %>').append("<%== state_elements %>");
21
+ <% end %>
22
+ </p>
23
+ <noscript>
24
+ <%= form.text_field :state_name, :class => 'form-control required' %>
25
+ </noscript>
26
+
27
+ <p class="field" id=<%="#{address_id}county" %>>
28
+ <% have_counties = address.state and !address.state.counties.empty? %>
29
+ <%= form.label :county do %>
30
+ <%= Spree.t(:county) %>
31
+ <% if address.require_county? %>
32
+ <abbr class="required" id=<%="#{address_id}county-required"%>>*</abbr>
33
+ <% end %>
34
+ <% end %>
35
+
36
+ <% county_elements = [
37
+ form.collection_select(:county_id, address.state ? address.state.counties : {},
38
+ :id, :name,
39
+ {:include_blank => true},
40
+ {:class => (have_counties || address.require_county?) ? "form-control required" : "form-control",
41
+ :disabled => !have_counties}) +
42
+ form.text_field(:county_name,
43
+ :class => (!have_counties || address.require_county?) ? 'form-control required' : 'form-control hidden',
44
+ :disabled => have_counties)
45
+ ].join.gsub('"', "'").gsub("\n", "")
46
+ %>
47
+ <%= javascript_tag do %>
48
+ $('#<%="#{address_id}county" %>').append("<%== county_elements %>");
49
+ <% end %>
50
+ </p>
51
+ <noscript>
52
+ <%= form.text_field :county_name, :class => 'form-control required' %>
53
+ </noscript>
@@ -0,0 +1,10 @@
1
+ <!-- insert_bottom "div[data-hook=address_fields]" -->
2
+ <div class="field <%= "#{type}-row" %>">
3
+ <%= f.label :county_id, Spree.t(:county) %>
4
+ <span id="<%= s_or_b %>county">
5
+ <%= f.text_field :county_name,
6
+ :style => "display: #{f.object.state.counties.empty? ? 'block' : 'none' };",
7
+ :disabled => !f.object.state.counties.empty?, :class => 'fullwidth county_name' %>
8
+ <%= f.collection_select :county_id, f.object.state.counties.sort, :id, :name, {:include_blank => true}, {:class => 'select2 fullwidth', :style => "display: #{f.object.state.counties.empty? ? 'none' : 'block' };", :disabled => f.object.state.counties.empty?} %>
9
+ </span>
10
+ </div>
@@ -12,4 +12,5 @@ en:
12
12
  other: Counties
13
13
  spree:
14
14
  counties: "Counties"
15
+ county: "County"
15
16
  new_county: "New county"
@@ -12,4 +12,5 @@ es:
12
12
  other: Comunas
13
13
  spree:
14
14
  counties: "Comunas"
15
+ county: "Comuna"
15
16
  new_county: "Nueva comuna"
data/config/routes.rb CHANGED
@@ -6,7 +6,7 @@ Spree::Core::Engine.routes.draw do
6
6
 
7
7
  namespace :admin do
8
8
  resources :counties
9
- resource :states do
9
+ resources :states do
10
10
  resources :counties
11
11
  end
12
12
  end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Admin::CountiesController do
4
+ describe 'GET #index' do
5
+ it { should use_before_action(:load_data) }
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::County do
4
+ ##############
5
+ # attributes #
6
+ ##############
7
+ it { expect(subject).to respond_to :name }
8
+ it { expect(subject).to respond_to :state_id }
9
+
10
+ ##############
11
+ # association #
12
+ ##############
13
+ it { should belong_to(:state) }
14
+
15
+ ##############
16
+ # validations #
17
+ ##############
18
+ it { should validate_presence_of(:name) }
19
+ end
data/spec/spec_helper.rb CHANGED
@@ -18,6 +18,7 @@ require File.expand_path('../dummy/config/environment.rb', __FILE__)
18
18
  require 'rspec/rails'
19
19
  require 'database_cleaner'
20
20
  require 'ffaker'
21
+ require 'shoulda/matchers'
21
22
 
22
23
  # Requires supporting ruby files with custom matchers and macros, etc,
23
24
  # in spec/support/ and its subdirectories.
@@ -26,8 +27,10 @@ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
26
27
  # Requires factories and other useful helpers defined in spree_core.
27
28
  require 'spree/testing_support/authorization_helpers'
28
29
  require 'spree/testing_support/capybara_ext'
29
- require 'spree/testing_support/controller_requests'
30
30
  require 'spree/testing_support/factories'
31
+ require 'spree/testing_support/preferences'
32
+ require 'spree/testing_support/controller_requests'
33
+ require 'spree/testing_support/flash'
31
34
  require 'spree/testing_support/url_helpers'
32
35
 
33
36
  # Requires factories defined in lib/spree_counties/factories.rb
@@ -35,7 +38,9 @@ require 'spree_counties/factories'
35
38
 
36
39
  RSpec.configure do |config|
37
40
  config.include FactoryGirl::Syntax::Methods
38
-
41
+ config.include Spree::TestingSupport::ControllerRequests, :type => :controller
42
+ config.include Devise::TestHelpers, :type => :controller
43
+
39
44
  # Infer an example group's spec type from the file location.
40
45
  config.infer_spec_type_from_file_location!
41
46
 
@@ -2,7 +2,7 @@
2
2
  Gem::Specification.new do |s|
3
3
  s.platform = Gem::Platform::RUBY
4
4
  s.name = 'spree_counties'
5
- s.version = '3.0.1'
5
+ s.version = '3.0.4'
6
6
  s.summary = 'Lets your users pick counties from states list in address\'s step'
7
7
  s.description = 'Add county model to address'
8
8
  s.required_ruby_version = '>= 1.9.3'
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.requirements << 'none'
19
19
 
20
20
  s.add_dependency('spree_core', '~> 3.0')
21
+ s.add_dependency('spree_backend', '~> 3.0')
21
22
 
22
23
  s.add_development_dependency 'capybara', '~> 2.4'
23
24
  s.add_development_dependency 'coffee-rails'
@@ -27,6 +28,7 @@ Gem::Specification.new do |s|
27
28
  s.add_development_dependency 'rspec-rails', '~> 3.1'
28
29
  s.add_development_dependency 'sass-rails', '~> 4.0.2'
29
30
  s.add_development_dependency 'selenium-webdriver'
31
+ s.add_development_dependency 'shoulda-matchers'
30
32
  s.add_development_dependency 'simplecov'
31
33
  s.add_development_dependency 'sqlite3'
32
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_counties
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gonzalo Moreno
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-30 00:00:00.000000000 Z
11
+ date: 2015-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree_core
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: spree_backend
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: capybara
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +150,20 @@ dependencies:
136
150
  - - ">="
137
151
  - !ruby/object:Gem::Version
138
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: shoulda-matchers
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: simplecov
141
169
  requirement: !ruby/object:Gem::Requirement
@@ -173,6 +201,8 @@ files:
173
201
  - ".bundle/config"
174
202
  - ".gitignore"
175
203
  - ".rspec"
204
+ - ".ruby-gemset"
205
+ - ".ruby-version"
176
206
  - Gemfile
177
207
  - LICENSE.txt
178
208
  - README.md
@@ -187,14 +217,14 @@ files:
187
217
  - app/models/spree/address_decorator.rb
188
218
  - app/models/spree/county.rb
189
219
  - app/models/spree/state_decorator.rb
220
+ - app/overrides/spree/address/_form/add_county.html.erb.deface
221
+ - app/overrides/spree/admin/shared/_address_form/add_county_to_form.html.erb.deface
190
222
  - app/overrides/spree/admin/states/index.rb
191
- - app/views/spree/address/_form.html.erb
192
223
  - app/views/spree/admin/counties/_county_list.html.erb
193
224
  - app/views/spree/admin/counties/_form.html.erb
194
225
  - app/views/spree/admin/counties/edit.html.erb
195
226
  - app/views/spree/admin/counties/index.html.erb
196
227
  - app/views/spree/admin/counties/new.html.erb
197
- - app/views/spree/admin/shared/_address_form.html.erb
198
228
  - app/views/spree/api/counties/index.v1.rabl
199
229
  - app/views/spree/api/counties/show.v1.rabl
200
230
  - bin/rails
@@ -212,6 +242,8 @@ files:
212
242
  - lib/spree_counties/engine.rb
213
243
  - lib/spree_counties/factories.rb
214
244
  - lib/spree_counties/version.rb
245
+ - spec/controllers/spree/admin/counties_controller_spec.rb
246
+ - spec/models/spree/county_spec.rb
215
247
  - spec/spec_helper.rb
216
248
  - spree_counties.gemspec
217
249
  homepage: http://www.acid.cl
@@ -235,10 +267,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
235
267
  requirements:
236
268
  - none
237
269
  rubyforge_project:
238
- rubygems_version: 2.4.2
270
+ rubygems_version: 2.4.5
239
271
  signing_key:
240
272
  specification_version: 4
241
273
  summary: Lets your users pick counties from states list in address's step
242
274
  test_files:
275
+ - spec/controllers/spree/admin/counties_controller_spec.rb
276
+ - spec/models/spree/county_spec.rb
243
277
  - spec/spec_helper.rb
244
- has_rdoc:
@@ -1,86 +0,0 @@
1
- <% address_id = address_type.chars.first %>
2
- <div class="inner" data-hook=<%="#{address_type}_inner" %>>
3
- <p class="field" id=<%="#{address_id}firstname" %>>
4
- <%= form.label :firstname, Spree.t(:first_name) %><span class="required">*</span><br />
5
- <%= form.text_field :firstname, :class => 'required' %>
6
- </p>
7
- <p class="field" id=<%="#{address_id}lastname" %>>
8
- <%= form.label :lastname, Spree.t(:last_name) %><span class="required">*</span><br />
9
- <%= form.text_field :lastname, :class => 'required' %>
10
- </p>
11
- <% if Spree::Config[:company] %>
12
- <p class="field" id=<%="#{address_id}company" %>>
13
- <%= form.label :company, Spree.t(:company) %><br />
14
- <%= form.text_field :company %>
15
- </p>
16
- <% end %>
17
- <p class="field" id=<%="#{address_id}address1" %>>
18
- <%= form.label :address1, Spree.t(:street_address) %><span class="required">*</span><br />
19
- <%= form.text_field :address1, :class => 'required' %>
20
- </p>
21
- <p class="field" id=<%="#{address_id}address2" %>>
22
- <%= form.label :address2, Spree.t(:street_address_2) %><br />
23
- <%= form.text_field :address2 %>
24
- </p>
25
- <p class="field" id=<%="#{address_id}city" %>>
26
- <%= form.label :city, Spree.t(:city) %><span class="required">*</span><br />
27
- <%= form.text_field :city, :class => 'required' %>
28
- </p>
29
- <p class="field" id=<%="#{address_id}country" %>>
30
- <%= form.label :country_id, Spree.t(:country) %><span class="required">*</span><br />
31
- <span id=<%="#{address_id}country-selection" %>>
32
- <%= form.collection_select :country_id, available_countries, :id, :name, {}, {:class => 'required'} %>
33
- </span>
34
- </p>
35
-
36
- <% if Spree::Config[:address_requires_state] %>
37
- <p class="field" id=<%="#{address_id}state" %>>
38
- <% have_states = !address.country.states.empty? %>
39
- <%= form.label :state, Spree.t(:state) %><span class='required' id=<%="#{address_id}state-required"%>>*</span><br/>
40
-
41
- <% state_elements = [
42
- form.collection_select(:state_id, address.country.states,
43
- :id, :name,
44
- {:include_blank => true},
45
- {:class => have_states ? 'required' : 'hidden',
46
- :disabled => !have_states}) +
47
- form.text_field(:state_name,
48
- :class => !have_states ? 'required' : 'hidden',
49
- :disabled => have_states)
50
- ].join.gsub('"', "'").gsub("\n", "")
51
- %>
52
- <%= javascript_tag do -%>
53
- $('#<%="#{address_id}state" %>').append("<%== state_elements %>");
54
- <% end %>
55
- </p>
56
- <noscript>
57
- <%= form.text_field :state_name, :class => 'required' %>
58
- </noscript>
59
-
60
- <p class="field" id=<%="#{address_id}county" %>>
61
- <%= form.label :county do %>
62
- <%= Spree.t(:county) %>
63
- <span class="required" id=<%="#{address_id}county-required"%>>*</span>
64
- <% end %>
65
- <%= form.collection_select(:county_id, [],
66
- :id, :name,
67
- {:include_blank => true},
68
- {:class => "form-control required",}) %>
69
- </p>
70
- <% end %>
71
-
72
- <p class="field" id=<%="#{address_id}zipcode" %>>
73
- <%= form.label :zipcode, Spree.t(:zip) %><% if address.require_zipcode? %><span class="required">*</span><br /><% end %>
74
- <%= form.text_field :zipcode, :class => "#{'required' if address.require_zipcode?}" %>
75
- </p>
76
- <p class="field" id=<%="#{address_id}phone" %>>
77
- <%= form.label :phone, Spree.t(:phone) %><% if address.require_phone? %><span class="required">*</span><br /><% end %>
78
- <%= form.phone_field :phone, :class => "#{'required' if address.require_phone?}" %>
79
- </p>
80
- <% if Spree::Config[:alternative_shipping_phone] %>
81
- <p class="field" id=<%="#{address_id}altphone" %>>
82
- <%= form.label :alternative_phone, Spree.t(:alternative_phone) %><br />
83
- <%= form.phone_field :alternative_phone %>
84
- </p>
85
- <% end %>
86
- </div>
@@ -1,81 +0,0 @@
1
- <% s_or_b = type.chars.first %>
2
-
3
- <div id="<%= type %>" data-hook="address_fields">
4
- <div class="field <%= "#{type}-row" %>">
5
- <%= f.label :firstname, Spree.t(:first_name) %>
6
- <%= f.text_field :firstname, :class => 'fullwidth' %>
7
- </div>
8
-
9
- <div class="field <%= "#{type}-row" %>">
10
- <%= f.label :lastname, Spree.t(:last_name) %>
11
- <%= f.text_field :lastname, :class => 'fullwidth' %>
12
- </div>
13
-
14
- <% if Spree::Config[:company] %>
15
- <div class="field <%= "#{type}-row" %>">
16
- <%= f.label :company, Spree.t(:company) %>
17
- <%= f.text_field :company, :class => 'fullwidth' %>
18
- </div>
19
- <% end %>
20
-
21
- <div class="field <%= "#{type}-row" %>">
22
- <%= f.label :address1, Spree.t(:street_address) %>
23
- <%= f.text_field :address1, :class => 'fullwidth' %>
24
- </div>
25
-
26
- <div class="field <%= "#{type}-row" %>">
27
- <%= f.label :address2, Spree.t(:street_address_2) %>
28
- <%= f.text_field :address2, :class => 'fullwidth' %>
29
- </div>
30
-
31
- <div class="field <%= "#{type}-row" %>">
32
- <%= f.label :city, Spree.t(:city) %>
33
- <%= f.text_field :city, :class => 'fullwidth' %>
34
- </div>
35
-
36
- <div class="field <%= "#{type}-row" %>">
37
- <%= f.label :zipcode, Spree.t(:zip) %>
38
- <%= f.text_field :zipcode, :class => 'fullwidth' %>
39
- </div>
40
-
41
- <div class="field <%= "#{type}-row" %>">
42
- <%= f.label :country_id, Spree.t(:country) %>
43
- <span id="<%= s_or_b %>country">
44
- <%= f.collection_select :country_id, available_countries, :id, :name, {}, {:class => 'select2 fullwidth'} %>
45
- </span>
46
- </div>
47
-
48
- <div class="field <%= "#{type}-row" %>">
49
- <%= f.label :state_id, Spree.t(:state) %>
50
- <span id="<%= s_or_b %>state">
51
- <%= f.text_field :state_name,
52
- :style => "display: #{f.object.country.states.empty? ? 'block' : 'none' };",
53
- :disabled => !f.object.country.states.empty?, :class => 'fullwidth state_name' %>
54
- <%= f.collection_select :state_id, f.object.country.states.sort, :id, :name, {:include_blank => true}, {:class => 'select2 fullwidth', :style => "display: #{f.object.country.states.empty? ? 'none' : 'block' };", :disabled => f.object.country.states.empty?} %>
55
- </span>
56
- </div>
57
-
58
- <div class="field <%= "#{type}-row" %>">
59
- <%= f.label :county_id, Spree.t(:county) %>
60
- <span id="<%= s_or_b %>county">
61
- <%= f.text_field :county_name,
62
- :style => "display: #{f.object.state.counties.empty? ? 'block' : 'none' };",
63
- :disabled => !f.object.state.counties.empty?, :class => 'fullwidth county_name' %>
64
- <%= f.collection_select :county_id, f.object.state.counties.sort, :id, :name, {:include_blank => true}, {:class => 'select2 fullwidth', :style => "display: #{f.object.state.counties.empty? ? 'none' : 'block' };", :disabled => f.object.state.counties.empty?} %>
65
- </span>
66
- </div>
67
-
68
- <div class="field <%= "#{type}-row" %>">
69
- <%= f.label :phone, Spree.t(:phone) %>
70
- <%= f.phone_field :phone, :class => 'fullwidth' %>
71
- </div>
72
- </div>
73
-
74
- <% content_for :head do %>
75
- <%= javascript_tag do -%>
76
- $(document).ready(function(){
77
- $('span#<%= s_or_b %>country .select2').on('change', function() { update_state('<%= s_or_b %>'); });
78
- $('span#<%= s_or_b %>state .select2').on('change', function() { update_county('<%= s_or_b %>'); });
79
- });
80
- <% end -%>
81
- <% end %>