rails-google-maps 0.0.15 → 0.0.16

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -31,6 +31,11 @@ And include it in your ```application.js``` file after jquery:
31
31
  //= require rails-google-maps/google_maps
32
32
  ```
33
33
 
34
+ Optionally you can use default styles for the map object:
35
+ ```
36
+ // application.css
37
+ *= require rails_google_maps
38
+ ```
34
39
 
35
40
  ## Usage
36
41
  ####SimpleForm usage:
@@ -1,4 +1,5 @@
1
1
  class GoogleMapsAutocompleteInput < SimpleForm::Inputs::StringInput
2
+ include ActionView::Helpers::JavaScriptHelper
2
3
  include ActionView::Helpers::TagHelper
3
4
  def input
4
5
  gmap_id = input_html_options.delete(:gmap_id)
@@ -6,7 +7,7 @@ class GoogleMapsAutocompleteInput < SimpleForm::Inputs::StringInput
6
7
  lat_id = input_html_options.key?(:lat_id) ? input_html_options.delete(:lat_id) : nil
7
8
  lng_id = input_html_options.key?(:lng_id) ? input_html_options.delete(:lng_id) : nil
8
9
  input = @builder.text_field(attribute_name, input_html_options)
9
- (input + content_tag('script', script_text(gmap_id, input, apply, lat_id, lng_id).html_safe)).html_safe
10
+ (input + javascript_tag(script_text(gmap_id, input, apply, lat_id, lng_id))).html_safe
10
11
  end
11
12
 
12
13
  private
@@ -30,7 +31,8 @@ class GoogleMapsAutocompleteInput < SimpleForm::Inputs::StringInput
30
31
  }
31
32
  var latId = '#{lat_id.to_s}', lngId = '#{lng_id.to_s}';
32
33
  if(latId && lngId){
33
- gmap.setOptions({longitudeInput: lngId, latitudeInput: latId});
34
+ gmap.setOptions({longitudeInput: '#' + lngId, latitudeInput: '#' + latId});
35
+ gmap.setFromLatLng()
34
36
  }
35
37
  })"
36
38
  end
@@ -1,3 +1,3 @@
1
1
  module RailsGoogleMaps
2
- VERSION = "0.0.15"
2
+ VERSION = "0.0.16"
3
3
  end
@@ -1,23 +1,18 @@
1
- root = exports ? this
2
-
3
- class root.Autocomplete
4
- source: ()->
1
+ class @Autocomplete
2
+ source: ()=>
5
3
  []
6
- select: ()->
7
- ()->
8
- change: ()->
9
- ()->
4
+ select: ()=>
5
+ change: ()=>
10
6
  minChars: 2
11
7
 
12
- constructor: (@selector)->
13
- @$el = $(@selector)
8
+ constructor: (selector)->
9
+ @$el = $(selector)
14
10
 
15
11
  apply: ()->
16
- self = this
17
- $(@selector).autocomplete
18
- source: self.source(self)
19
- select: self.select(self)
20
- change: self.change(self)
12
+ @$el.autocomplete
13
+ source: @source
14
+ select: @select
15
+ change: @change
21
16
  this.afterApply()
22
17
 
23
18
  afterApply: ()->
@@ -28,38 +23,35 @@ class root.Autocomplete
28
23
  # gmap.apply()
29
24
  # autoComplete = new GmapAutocomplete('#gmaps-input-address', gmap)
30
25
  # autoComplete.apply()
31
- class root.GmapAutocomplete extends Autocomplete
26
+ class @GmapAutocomplete extends Autocomplete
32
27
 
33
- constructor: (@selector, @gmap)->
34
- self = this
35
- @gmap.onSucceed.push (address)->
36
- $(self.selector).val address
28
+ constructor: (selector, @gmap)->
29
+ super selector
30
+ @gmap.onSucceed.push (address)=>
31
+ @$el.val address
37
32
 
38
- source: (self)->
39
- (request, response)->
40
- self.gmap.searchGeocodes request.term, (results)->
41
- response $.map results, (item) ->
42
- label: item.formatted_address
43
- value: item.formatted_address
44
- geocode: item
33
+ source: (request, response) =>
34
+ @gmap.searchGeocodes request.term, (results)->
35
+ response $.map results, (item) ->
36
+ label: item.formatted_address
37
+ value: item.formatted_address
38
+ geocode: item
45
39
 
46
- select: (self)->
47
- (event, ui) ->
48
- self.gmap.update ui.item.geocode
40
+ select: (event, ui) =>
41
+ @gmap.update ui.item.geocode
49
42
 
50
43
  afterApply: ()->
51
- this.syncWithMap()
52
- this._addKeyDownHandlers()
44
+ @syncWithMap()
45
+ @_addKeyDownHandlers()
53
46
 
54
47
  syncWithMap: ()->
55
- @gmap.setMarker('address', $(@selector).val()) if $(@selector).val()
48
+ @gmap.setMarker('address', @$el.val()) if @$el.val()
56
49
 
57
50
  _addKeyDownHandlers: ()->
58
- self = this
59
- $(@selector).bind 'keydown', (event)->
51
+ @$el.bind 'keydown', (event)=>
60
52
  if event.keyCode == 13
61
- self.gmap.setMarker 'address', $(self.selector).val()
62
- $(self.selector).autocomplete "disable"
53
+ @gmap.setMarker 'address', @$el.val()
54
+ @$el.autocomplete "disable"
63
55
  else
64
- $(self.selector).autocomplete "enable"
56
+ @$el.autocomplete "enable"
65
57
 
@@ -1,11 +1,8 @@
1
- root = exports ? this
2
- return unless google?
3
-
4
1
  # Google map class
5
2
  # Example:
6
3
  # gmap = new GoogleMap
7
4
  # gmap.apply()
8
- class root.GoogleMap
5
+ class @GoogleMap
9
6
 
10
7
  #defines whether user can change map pin or not
11
8
  immutable: false
@@ -33,112 +30,92 @@ class root.GoogleMap
33
30
  @errorField = options['errorField'] if options['errorField']
34
31
  if options['longitudeInput'] and options['latitudeInput']
35
32
  @saveLangLat = true
36
- @longitudeInput = options['longitudeInput']
37
- @latitudeInput = options['latitudeInput']
38
-
33
+ @latLng = new LatLngContainer(options['latitudeInput'], options['longitudeInput'])
39
34
 
40
35
  apply: ()->
41
36
  if($(@mapSelector).length > 0)
42
37
  @map = new google.maps.Map $(@mapSelector)[0], @gmapOptions
43
- @marker = new google.maps.Marker {map: @map, draggable: true}
38
+ @marker = new google.maps.Marker {map: @map, draggable: !@immutable}
44
39
  else
45
40
  @mapless = true
46
41
  @geocoder = new google.maps.Geocoder()
47
42
  @gmapErrors = new GmapErrors @errorField
48
- this._addListeners()
43
+ @_addListeners() unless @immutable or @mapless
49
44
  @_applied = true
50
45
 
51
46
  applied: ()->
52
47
  @_applied
53
48
 
54
- setMarker: (type, value, update = true, afterCallback = ()->)->
49
+ setMarker: (type, value, focusOnMarker = true, afterCallback = ()->)->
55
50
  request = {}
56
51
  request[type] = value
57
- self = this
58
- @geocoder.geocode request, (results, status)->
59
- self.gmapErrors.cleanErrors()
60
- if status is google.maps.GeocoderStatus.OK
61
- self._succeed(results, update)
52
+ @geocoder.geocode request, (results, status)=>
53
+ if status is google.maps.GeocoderStatus.OK and results[0]
54
+ @_succeed results, focusOnMarker
62
55
  else
63
- self._failed(update, type, value)
56
+ @_failed(type, value)
64
57
  afterCallback()
65
58
 
66
59
  searchGeocodes: (term, callback)->
67
60
  @geocoder.geocode {'address': term }, (results, status)->
68
61
  callback(results, status)
69
62
 
70
-
71
63
  update: (geocode)->
72
64
  unless @mapless
73
65
  @map.fitBounds geocode.geometry.viewport
74
66
  @marker.setPosition geocode.geometry.location
75
- this.saveLatLang(geocode.geometry) if @saveLangLat
67
+ @latLng.store(geocode.geometry) if @saveLangLat
76
68
 
77
- _addListeners: ()->
78
- self = this
79
- return if @immutable
80
- unless @mapless
81
- google.maps.event.addListener @marker, 'dragend', () ->
82
- self.setMarker 'latLng', self.marker.getPosition(), false
83
- google.maps.event.addListener @map, 'click', (event) ->
84
- self.marker.setPosition event.latLng
85
- self.setMarker 'latLng', event.latLng, false
86
-
87
- _succeed: (results, update)->
88
- if results[0]
89
- this.update(results[0]) if update
90
- $.map @onSucceed, (callback)->
91
- callback(results[0].formatted_address)
92
- this.saveLatLang(results[0].geometry) if @saveLangLat
93
- else
94
- @gmapErrors.wrongInputError()
69
+ setFromLatLng: ()->
70
+ @setMarker('latLng', new google.maps.LatLng(@latLng.lat(), @latLng.lng()))
95
71
 
96
- _failed: (update, type, value)->
97
- this.clearLatLng() if @saveLangLat
72
+ _addListeners: ()->
73
+ google.maps.event.addListener @marker, 'dragend', () =>
74
+ @setMarker 'latLng', @marker.getPosition(), false
75
+ google.maps.event.addListener @map, 'click', (event) =>
76
+ @marker.setPosition event.latLng
77
+ @setMarker 'latLng', event.latLng, false
78
+
79
+ _succeed: (results, focusOnMarker)->
80
+ @update(results[0]) if focusOnMarker
81
+ $.map @onSucceed, (callback)->
82
+ callback(results[0].formatted_address)
83
+ @latLng.store(results[0].geometry) if @saveLangLat
84
+
85
+ _failed: (type, value)->
98
86
  if type is 'address'
99
87
  @gmapErrors.incorrectAddress(value)
100
88
  else
101
89
  @gmapErrors.incorrectLatlng()
102
90
 
103
- saveLatLang: (geometry)->
104
- $(@latitudeInput).val(geometry.location.lat())
105
- $(@longitudeInput).val(geometry.location.lng())
106
-
107
- clearLatLng: ()->
108
- $(@latitudeInput).val('')
109
- $(@longitudeInput).val('')
110
-
111
91
  # Class for displaying Gmap Errors.
112
92
  # All the errors can be customised
113
93
  # There are several type of errors:
114
94
  # GmapErrors.wrongInputText
115
95
  # GmapErrors.incorrectLatLngText
116
96
  # GmapErrors.incorrectAddressText(value) - callback, incorrect address can be used inside
117
- class root.GmapErrors
97
+ class @GmapErrors
118
98
 
119
- @wrongInputText: "Sorry, something went wrong. Try again!"
120
99
  @incorrectLatLngText: "Woah... that's pretty remote! You're going to have to manually enter a place name."
121
100
 
122
101
  constructor: (@errorField)->
123
102
 
124
103
  incorrectAddress: (value)->
125
- this.setError(GmapErrors.incorrectAddressText(value))
126
- this.show()
104
+ @cleanErrors()
105
+ @setError(GmapErrors.incorrectAddressText(value))
106
+ @show()
127
107
 
128
108
  incorrectLatlng: ()->
129
- this.setError(@incorrectLatLngText)
130
- this.show()
109
+ @cleanErrors()
110
+ @setError(@incorrectLatLngText)
111
+ @show()
131
112
 
132
113
  @incorrectAddressText: (value)->
133
114
  "Sorry! We couldn't find #{value}. Try a different search term, or click the map."
134
115
 
135
- wrongInputError: ()->
136
- this.setError(@wrongInputText)
137
- this.show()
138
-
139
116
  cleanErrors: ()->
140
- this.setError('')
141
- this.hide()
117
+ @setError('')
118
+ @hide()
142
119
 
143
120
  show: ()->
144
121
  $(@errorField).show()
@@ -149,5 +126,28 @@ class root.GmapErrors
149
126
  setError: (text)->
150
127
  $(@errorField).html(text)
151
128
 
129
+ class LatLngContainer
130
+ constructor: (latitudeInput, longitudeInput)->
131
+ @latitudeInput = $(latitudeInput)
132
+ @longitudeInput = $(longitudeInput)
133
+
134
+ lat: ()->
135
+ @latitudeInput.val()
136
+
137
+ lng: ()->
138
+ @longitudeInput.val()
139
+
140
+ googleLatLng: ()->
141
+ new google.maps.LatLng(@lat, @lng)
142
+
143
+ store: (geometry)->
144
+ @latitudeInput.val(geometry.location.lat())
145
+ @longitudeInput.val(geometry.location.lng())
146
+
147
+ clear: ()->
148
+ @latitudeInput.val('')
149
+ @longitudeInput.val('')
150
+
151
+
152
152
 
153
153
 
@@ -0,0 +1,11 @@
1
+ #gmap_canvas {
2
+ padding: 6px;
3
+ border-width: 1px;
4
+ border-style: solid;
5
+ border-color: #ccc #ccc #999 #ccc;
6
+ -webkit-box-shadow: rgba(64, 64, 64, 0.5) 0 2px 5px;
7
+ -moz-box-shadow: rgba(64, 64, 64, 0.5) 0 2px 5px;
8
+ box-shadow: rgba(64, 64, 64, 0.1) 0 2px 5px;
9
+ width: 800px;
10
+ height: 400px;
11
+ }
metadata CHANGED
@@ -1,48 +1,48 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-google-maps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.15
5
4
  prerelease:
5
+ version: 0.0.16
6
6
  platform: ruby
7
7
  authors:
8
8
  - Yuri Ratanov
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-12 00:00:00.000000000 Z
12
+ date: 2013-07-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
+ type: :runtime
16
17
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
21
  version: '3.0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
22
  none: false
23
+ version_requirements: !ruby/object:Gem::Requirement
26
24
  requirements:
27
25
  - - ~>
28
26
  - !ruby/object:Gem::Version
29
27
  version: '3.0'
28
+ none: false
29
+ prerelease: false
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: jquery-rails
32
+ type: :runtime
32
33
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
34
  requirements:
35
35
  - - ! '>='
36
36
  - !ruby/object:Gem::Version
37
37
  version: '0'
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
38
  none: false
39
+ version_requirements: !ruby/object:Gem::Requirement
42
40
  requirements:
43
41
  - - ! '>='
44
42
  - !ruby/object:Gem::Version
45
43
  version: '0'
44
+ none: false
45
+ prerelease: false
46
46
  description: Provides simple way to add google maps to your app
47
47
  email:
48
48
  - yratanov@gmail.com
@@ -62,6 +62,7 @@ files:
62
62
  - rails-google-maps.gemspec
63
63
  - vendor/assets/javascripts/rails-google-maps/autocomplete.js.coffee
64
64
  - vendor/assets/javascripts/rails-google-maps/google_maps.js.coffee
65
+ - vendor/assets/stylesheets/rails_google_maps.css
65
66
  homepage: http://github.com/yratanov/rails_google_maps
66
67
  licenses: []
67
68
  post_install_message:
@@ -69,20 +70,26 @@ rdoc_options: []
69
70
  require_paths:
70
71
  - lib
71
72
  required_ruby_version: !ruby/object:Gem::Requirement
72
- none: false
73
73
  requirements:
74
74
  - - ! '>='
75
75
  - !ruby/object:Gem::Version
76
+ segments:
77
+ - 0
78
+ hash: 1853501962189102729
76
79
  version: '0'
77
- required_rubygems_version: !ruby/object:Gem::Requirement
78
80
  none: false
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
82
  requirements:
80
83
  - - ! '>='
81
84
  - !ruby/object:Gem::Version
85
+ segments:
86
+ - 0
87
+ hash: 1853501962189102729
82
88
  version: '0'
89
+ none: false
83
90
  requirements: []
84
91
  rubyforge_project:
85
- rubygems_version: 1.8.24
92
+ rubygems_version: 1.8.25
86
93
  signing_key:
87
94
  specification_version: 3
88
95
  summary: Provides simple way to add google maps to your app