gmaps-autocomplete-rails 0.1.0 → 0.1.1
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/README.md +86 -15
- data/VERSION +1 -1
- data/gmaps-autocomplete-rails.gemspec +86 -0
- data/spec/init.js +2 -2
- data/vendor/assets/javascripts/gmaps-autocomplete.js +153 -114
- metadata +4 -3
data/README.md
CHANGED
@@ -23,37 +23,108 @@ Packed and ready for the Asset pipeline :)
|
|
23
23
|
|
24
24
|
```javascript
|
25
25
|
$(document).ready(function() {
|
26
|
-
GmapsAutoComplete.
|
27
|
-
GmapsAutoComplete.
|
26
|
+
GmapsAutoComplete.init();
|
27
|
+
GmapsAutoComplete.autoCompleteInit();
|
28
28
|
});
|
29
29
|
```
|
30
30
|
|
31
31
|
## Configuration options
|
32
32
|
|
33
|
-
`
|
33
|
+
`init()` take an option hash, using the following defaults:
|
34
34
|
|
35
35
|
```javascript
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
36
|
+
defaultOptions = {
|
37
|
+
mapElem: "#gmaps-canvas",
|
38
|
+
zoomLevel: 2,
|
39
|
+
mapType: google.maps.MapTypeId.ROADMAP,
|
40
|
+
pos: [51.751724, -1.255284],
|
41
|
+
inputField: '#gmaps-input-address',
|
42
|
+
errorField: '#gmaps-error',
|
43
|
+
positionOutputter: this.defaultPositionOutputter,
|
44
|
+
updateUI : this.defaultUpdateUI,
|
45
|
+
updateMap : this.defaultUpdateMap
|
46
|
+
};
|
45
47
|
```
|
46
48
|
|
47
|
-
`
|
49
|
+
`autoCompleteInit` also takes an option hash, but currently only [region](https://developers.google.com/maps/documentation/geocoding/#RegionCodes) is used.
|
48
50
|
|
49
51
|
```javascript
|
50
|
-
|
52
|
+
autoCompleteInit({region: 'USA'});
|
53
|
+
```
|
54
|
+
|
55
|
+
# Examples
|
56
|
+
|
57
|
+
See `spec/index.html` for an example page using this "plugin". Note that if you set `mapElem`to null or leave out that element on the page, the autocomplete will function without attempting to update the map :)
|
58
|
+
|
59
|
+
## Customization
|
60
|
+
|
61
|
+
Some of the prime candidate functions for customization are:
|
62
|
+
|
63
|
+
* updateUi
|
64
|
+
* updateMap
|
65
|
+
|
66
|
+
Here the default simple `updateUI` implementation:
|
67
|
+
|
68
|
+
```javascript
|
69
|
+
updateUi: function( address, latLng ) {
|
70
|
+
$(this.inputField).autocomplete("close");
|
71
|
+
$(this.inputField).val(address);
|
72
|
+
|
73
|
+
this.positionOutputter(latLng);
|
74
|
+
}
|
75
|
+
```
|
76
|
+
|
77
|
+
Let's enrich the autocomplete fields with a jobs count for "the area" for each address.
|
78
|
+
|
79
|
+
```javascript
|
80
|
+
updateUi: function( address, latLng ) {
|
81
|
+
$(this.inputField).autocomplete("close");
|
82
|
+
|
83
|
+
var jobsCount = $.ajax(url: 'jobs/search?address=' + address + '&type=count');
|
84
|
+
|
85
|
+
$(this.inputField).val(address + ' (' + jobsCount + ' jobs)');
|
86
|
+
}
|
87
|
+
```
|
88
|
+
|
89
|
+
## Customize messages
|
90
|
+
|
91
|
+
For now, directly define your own implementation (override) the following functions directly on GmapsAutoComplete
|
92
|
+
|
93
|
+
* geocodeErrorMsg: function()
|
94
|
+
* invalidAddressMsg: function(value)
|
95
|
+
* noAddressFoundMsg: function()
|
96
|
+
|
97
|
+
Example:
|
98
|
+
|
99
|
+
```javascript
|
100
|
+
|
101
|
+
GmapsAutoComplete.geocodeErrorMsg = function() {
|
102
|
+
"Geocode error!"
|
103
|
+
}
|
104
|
+
```
|
105
|
+
|
106
|
+
## Formtastic example
|
107
|
+
|
108
|
+
For [formtastic](https://github.com/justinfrench/formtastic) something like:
|
109
|
+
|
110
|
+
```ruby
|
111
|
+
= semantic_form_for @search do |f|
|
112
|
+
= f.input :address, placeholder: 'find address'
|
113
|
+
%span#address_error
|
114
|
+
|
115
|
+
```javascript
|
116
|
+
$(document).ready(function() {
|
117
|
+
GmapsAutoComplete.init({inputField: 'form#search #address', errorField: 'form#search #address_error'});
|
118
|
+
GmapsAutoComplete.autoCompleteInit({region: 'DK'});
|
119
|
+
});
|
51
120
|
```
|
52
121
|
|
53
122
|
## TODO
|
54
123
|
|
55
124
|
* better Javascript encapsulation
|
56
|
-
* translation to Coffeescript
|
125
|
+
* translation to Coffeescript using Coffee classes :)
|
126
|
+
|
127
|
+
Please help out with suggestions and improvements etc!
|
57
128
|
|
58
129
|
## Contributing to gmaps-autocomplete-rails
|
59
130
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "gmaps-autocomplete-rails"
|
8
|
+
s.version = "0.1.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Kristian Mandrup"]
|
12
|
+
s.date = "2012-09-07"
|
13
|
+
s.description = "Easily add autocomplete geo-functionality to your Rails app :)"
|
14
|
+
s.email = "kmandrup@gmail.com"
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.md"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".rspec",
|
22
|
+
"Gemfile",
|
23
|
+
"Gemfile.lock",
|
24
|
+
"LICENSE.txt",
|
25
|
+
"README.md",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION",
|
28
|
+
"gmaps-autocomplete-rails.gemspec",
|
29
|
+
"lib/gmaps-autocomplete-rails.rb",
|
30
|
+
"lib/gmaps-autocomplete/view_helper.rb",
|
31
|
+
"spec/index.html",
|
32
|
+
"spec/init.js",
|
33
|
+
"spec/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png",
|
34
|
+
"spec/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png",
|
35
|
+
"spec/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png",
|
36
|
+
"spec/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png",
|
37
|
+
"spec/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png",
|
38
|
+
"spec/jquery-ui/images/ui-bg_glass_75_ffffff_1x400.png",
|
39
|
+
"spec/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png",
|
40
|
+
"spec/jquery-ui/images/ui-bg_inset-soft_95_fef1ec_1x100.png",
|
41
|
+
"spec/jquery-ui/images/ui-icons_222222_256x240.png",
|
42
|
+
"spec/jquery-ui/images/ui-icons_2e83ff_256x240.png",
|
43
|
+
"spec/jquery-ui/images/ui-icons_454545_256x240.png",
|
44
|
+
"spec/jquery-ui/images/ui-icons_888888_256x240.png",
|
45
|
+
"spec/jquery-ui/images/ui-icons_cd0a0a_256x240.png",
|
46
|
+
"spec/jquery-ui/images/ui-icons_f6cf3b_256x240.png",
|
47
|
+
"spec/jquery-ui/jquery-ui-1.8.16.custom.css",
|
48
|
+
"spec/jquery-ui/jquery.ui.1.8.16.ie.css",
|
49
|
+
"spec/main.css",
|
50
|
+
"spec/spec_helper.rb",
|
51
|
+
"vendor/assets/javascripts/gmaps-autocomplete.js"
|
52
|
+
]
|
53
|
+
s.homepage = "http://github.com/kristianmandrup/gmaps-autocomplete-rails"
|
54
|
+
s.licenses = ["MIT"]
|
55
|
+
s.require_paths = ["lib"]
|
56
|
+
s.rubygems_version = "1.8.24"
|
57
|
+
s.summary = "Google Maps v3 search with jQuery UI Autocomplete, ready for use with Rails asset pipeline"
|
58
|
+
|
59
|
+
if s.respond_to? :specification_version then
|
60
|
+
s.specification_version = 3
|
61
|
+
|
62
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
63
|
+
s.add_runtime_dependency(%q<rails>, [">= 3.0.0"])
|
64
|
+
s.add_development_dependency(%q<rspec>, [">= 2.8.0"])
|
65
|
+
s.add_development_dependency(%q<rdoc>, [">= 3.12"])
|
66
|
+
s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
|
67
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
|
68
|
+
s.add_development_dependency(%q<simplecov>, [">= 0.5"])
|
69
|
+
else
|
70
|
+
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
71
|
+
s.add_dependency(%q<rspec>, [">= 2.8.0"])
|
72
|
+
s.add_dependency(%q<rdoc>, [">= 3.12"])
|
73
|
+
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
74
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
75
|
+
s.add_dependency(%q<simplecov>, [">= 0.5"])
|
76
|
+
end
|
77
|
+
else
|
78
|
+
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
79
|
+
s.add_dependency(%q<rspec>, [">= 2.8.0"])
|
80
|
+
s.add_dependency(%q<rdoc>, [">= 3.12"])
|
81
|
+
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
82
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
83
|
+
s.add_dependency(%q<simplecov>, [">= 0.5"])
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
data/spec/init.js
CHANGED
@@ -5,6 +5,9 @@ var GmapsAutoComplete = {
|
|
5
5
|
inputField: null,
|
6
6
|
errorField: null,
|
7
7
|
positionOutputter: null,
|
8
|
+
updateUI: null,
|
9
|
+
updateMap: null,
|
10
|
+
region: null,
|
8
11
|
|
9
12
|
// initialise the google maps objects, and add listeners
|
10
13
|
mapElem: document.getElementById("gmaps-canvas"),
|
@@ -15,7 +18,7 @@ var GmapsAutoComplete = {
|
|
15
18
|
errorField: '#gmaps-error',
|
16
19
|
positionOutputter: this.defaultPositionOutputter,
|
17
20
|
|
18
|
-
|
21
|
+
init: function(opts){
|
19
22
|
opts = opts || {};
|
20
23
|
|
21
24
|
defaultOptions = {
|
@@ -25,7 +28,9 @@ var GmapsAutoComplete = {
|
|
25
28
|
pos: [51.751724, -1.255284],
|
26
29
|
inputField: '#gmaps-input-address',
|
27
30
|
errorField: '#gmaps-error',
|
28
|
-
positionOutputter: this.defaultPositionOutputter
|
31
|
+
positionOutputter: this.defaultPositionOutputter,
|
32
|
+
updateUI : this.defaultUpdateUI,
|
33
|
+
updateMap : this.defaultUpdateMap
|
29
34
|
};
|
30
35
|
|
31
36
|
$.extend(opts, defaultOptions);
|
@@ -47,6 +52,8 @@ var GmapsAutoComplete = {
|
|
47
52
|
this.errorField = opts['#gmaps-error'];
|
48
53
|
|
49
54
|
this.positionOutputter = opts['positionOutputter'];
|
55
|
+
this.updateUI = opts['updateUI'];
|
56
|
+
this.updateMap = opts['updateMap'];
|
50
57
|
|
51
58
|
// center of the universe
|
52
59
|
var latlng = new google.maps.LatLng(lat, lng);
|
@@ -66,46 +73,52 @@ var GmapsAutoComplete = {
|
|
66
73
|
self.showError("Map element " + opts['mapElem'] + " could not be resolved!");
|
67
74
|
}
|
68
75
|
|
69
|
-
if (mapElem) {
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
76
|
+
if (!mapElem) { return }
|
77
|
+
|
78
|
+
// create our map object
|
79
|
+
this.map = new google.maps.Map(mapElem, options);
|
80
|
+
|
81
|
+
if (!this.map) { return }
|
82
|
+
|
83
|
+
// the marker shows us the position of the latest address
|
84
|
+
this.marker = new google.maps.Marker({
|
85
|
+
map: this.map,
|
86
|
+
draggable: true
|
87
|
+
});
|
88
|
+
|
89
|
+
self.addMapListeners(this.marker, this.map);
|
90
|
+
},
|
91
|
+
|
92
|
+
addMapListeners: function(marker, map) {
|
93
|
+
self = this;
|
94
|
+
// event triggered when marker is dragged and dropped
|
95
|
+
google.maps.event.addListener(marker, 'dragend', function() {
|
96
|
+
self.geocodeLookup( 'latLng', marker.getPosition() );
|
97
|
+
});
|
98
|
+
|
99
|
+
// event triggered when map is clicked
|
100
|
+
google.maps.event.addListener(map, 'click', function(event) {
|
101
|
+
marker.setPosition(event.latLng)
|
102
|
+
self.geocodeLookup( 'latLng', event.latLng );
|
103
|
+
});
|
94
104
|
},
|
95
105
|
|
96
106
|
// move the marker to a new position, and center the map on it
|
97
|
-
|
98
|
-
|
99
|
-
|
107
|
+
defaultUpdateMap: function( geometry ) {
|
108
|
+
var map = this.map;
|
109
|
+
var marker = this.marker;
|
110
|
+
|
111
|
+
if (map) {
|
112
|
+
map.fitBounds( geometry.viewport )
|
100
113
|
}
|
101
114
|
|
102
|
-
if (
|
103
|
-
|
115
|
+
if (marker) {
|
116
|
+
marker.setPosition( geometry.location )
|
104
117
|
}
|
105
118
|
},
|
106
119
|
|
107
120
|
// fill in the UI elements with new position data
|
108
|
-
|
121
|
+
defaultUpdateUI: function( address, latLng ) {
|
109
122
|
$(this.inputField).autocomplete("close");
|
110
123
|
$(this.inputField).val(address);
|
111
124
|
|
@@ -125,7 +138,7 @@ var GmapsAutoComplete = {
|
|
125
138
|
// value: search query
|
126
139
|
//
|
127
140
|
// update: should we update the map (center map and position marker)?
|
128
|
-
|
141
|
+
geocodeLookup: function( type, value, update ) {
|
129
142
|
// default value: update = false
|
130
143
|
update = typeof update !== 'undefined' ? update : false;
|
131
144
|
|
@@ -133,101 +146,127 @@ var GmapsAutoComplete = {
|
|
133
146
|
request[type] = value;
|
134
147
|
var self = this;
|
135
148
|
|
136
|
-
geocoder.geocode(
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
149
|
+
geocoder.geocode(request, performGeocode);
|
150
|
+
},
|
151
|
+
|
152
|
+
performGeocode: function(results, status) {
|
153
|
+
$(self.errorField).html('');
|
154
|
+
if (status == google.maps.GeocoderStatus.OK) {
|
155
|
+
self.geocodeSuccess(results);
|
156
|
+
} else {
|
157
|
+
self.geocodeFailure(type, value);
|
158
|
+
};
|
159
|
+
},
|
160
|
+
|
161
|
+
geocodeSuccess: function(results) {
|
162
|
+
// Google geocoding has succeeded!
|
163
|
+
if (results[0]) {
|
164
|
+
// Always update the UI elements with new location data
|
165
|
+
this.updateUI( results[0].formatted_address,
|
166
|
+
results[0].geometry.location )
|
167
|
+
|
168
|
+
// Only update the map (position marker and center map) if requested
|
169
|
+
if( update ) { this.updateMap( results[0].geometry ) }
|
170
|
+
} else {
|
171
|
+
// Geocoder status ok but no results!?
|
172
|
+
this.showError( this.geocodeErrorMsg() );
|
173
|
+
}
|
174
|
+
},
|
175
|
+
|
176
|
+
geocodeFailure: function(type, value) {
|
177
|
+
// Google Geocoding has failed. Two common reasons:
|
178
|
+
// * Address not recognised (e.g. search for 'zxxzcxczxcx')
|
179
|
+
// * Location doesn't map to address (e.g. click in middle of Atlantic)
|
180
|
+
if( type == 'address' ) {
|
181
|
+
// User has typed in an address which we can't geocode to a location
|
182
|
+
this.showError( this.invalidAddressMsg(value) );
|
183
|
+
} else {
|
184
|
+
// User has clicked or dragged marker to somewhere that Google can't do a reverse lookup for
|
185
|
+
// In this case we display a warning, clear the address box, but fill in LatLng
|
186
|
+
this.showError( this.noAddressFoundMsg() );
|
187
|
+
this.updateUI('', value)
|
188
|
+
}
|
189
|
+
},
|
190
|
+
|
191
|
+
geocodeErrorMsg: function() {
|
192
|
+
"Sorry, something went wrong. Try again!"
|
193
|
+
},
|
194
|
+
|
195
|
+
invalidAddressMsg: function(value) {
|
196
|
+
"Sorry! We couldn't find " + value + ". Try a different search term, or click the map."
|
197
|
+
},
|
198
|
+
|
199
|
+
noAddressFoundMsg: function() {
|
200
|
+
"Woah... that's pretty remote! You're going to have to manually enter a place name."
|
167
201
|
},
|
168
202
|
|
169
203
|
showError: function(msg) {
|
170
|
-
$(
|
171
|
-
$(
|
204
|
+
$(this.errorField).html(msg);
|
205
|
+
$(this.errorField).show();
|
172
206
|
|
173
207
|
setTimeout(function(){
|
174
|
-
$(
|
208
|
+
$(this.errorField).hide();
|
175
209
|
}, 1000);
|
176
210
|
},
|
177
211
|
|
178
212
|
// initialise the jqueryUI autocomplete element
|
179
|
-
|
180
|
-
var self = this;
|
213
|
+
autoCompleteInit: function (opts) {
|
181
214
|
opts = opts || {};
|
182
|
-
|
183
|
-
|
184
|
-
$(self.inputField).autocomplete({
|
215
|
+
this.region = opts['region'] || 'DK';
|
185
216
|
|
217
|
+
$(this.inputField).autocomplete({
|
186
218
|
// source is the list of input options shown in the autocomplete dropdown.
|
187
219
|
// see documentation: http://jqueryui.com/demos/autocomplete/
|
188
|
-
source:
|
189
|
-
|
190
|
-
// https://developers.google.com/maps/documentation/geocoding/#RegionCodes
|
191
|
-
console.log('region', region);
|
192
|
-
var region_postfix = ''
|
193
|
-
if (region) {
|
194
|
-
region_postfix = ', ' + region
|
195
|
-
}
|
196
|
-
|
197
|
-
geocode_opts = {'address': request.term + region_postfix }
|
198
|
-
|
199
|
-
// the geocode method takes an address or LatLng to search for
|
200
|
-
// and a callback function which should process the results into
|
201
|
-
// a format accepted by jqueryUI autocomplete
|
202
|
-
geocoder.geocode(geocode_opts, function(results, status) {
|
203
|
-
response($.map(results, function(item) {
|
204
|
-
return {
|
205
|
-
label: item.formatted_address, // appears in dropdown box
|
206
|
-
value: item.formatted_address, // inserted into input element when selected
|
207
|
-
geocode: item // all geocode data: used in select callback event
|
208
|
-
}
|
209
|
-
}));
|
210
|
-
})
|
211
|
-
},
|
212
|
-
|
220
|
+
source: this.autoCompleteSource,
|
213
221
|
// event triggered when drop-down option selected
|
214
|
-
select:
|
215
|
-
self.update_ui( ui.item.value, ui.item.geocode.geometry.location )
|
216
|
-
self.update_map( ui.item.geocode.geometry )
|
217
|
-
}
|
222
|
+
select: this.autoCompleteSelect
|
218
223
|
});
|
219
224
|
|
220
225
|
// triggered when user presses a key in the address box
|
221
|
-
$(self.inputField).bind('keydown',
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
226
|
+
$(self.inputField).bind('keydown', this.keyDownHandler);
|
227
|
+
}, // autocomplete_init
|
228
|
+
|
229
|
+
keyDownHandler: function(event) {
|
230
|
+
if(event.keyCode == 13) {
|
231
|
+
this.geocodeLookup( 'address', $(self.inputField).val(), true );
|
232
|
+
|
233
|
+
// ensures dropdown disappears when enter is pressed
|
234
|
+
$(this.inputField).autocomplete("disable")
|
235
|
+
} else {
|
236
|
+
// re-enable if previously disabled above
|
237
|
+
$(this.inputField).autocomplete("enable")
|
238
|
+
}
|
239
|
+
},
|
240
|
+
|
241
|
+
// self grants access to caller scope
|
242
|
+
autoCompleteSelect: function(event,ui){
|
243
|
+
self.updateUI( ui.item.value, ui.item.geocode.geometry.location )
|
244
|
+
self.updateMap( ui.item.geocode.geometry )
|
245
|
+
},
|
246
|
+
|
247
|
+
// self grants access to caller scope
|
248
|
+
autoCompleteSource: function(request,response) {
|
249
|
+
// https://developers.google.com/maps/documentation/geocoding/#RegionCodes
|
250
|
+
var region_postfix = ''
|
251
|
+
var region = self.region;
|
252
|
+
|
253
|
+
if (region) {
|
254
|
+
region_postfix = ', ' + region
|
255
|
+
}
|
256
|
+
|
257
|
+
geocode_opts = {'address': request.term + region_postfix }
|
258
|
+
|
259
|
+
// the geocode method takes an address or LatLng to search for
|
260
|
+
// and a callback function which should process the results into
|
261
|
+
// a format accepted by jqueryUI autocomplete
|
262
|
+
geocoder.geocode(geocode_opts, function(results, status) {
|
263
|
+
response($.map(results, function(item) {
|
264
|
+
return {
|
265
|
+
label: item.formatted_address, // appears in dropdown box
|
266
|
+
value: item.formatted_address, // inserted into input element when selected
|
267
|
+
geocode: item // all geocode data: used in select callback event
|
268
|
+
}
|
269
|
+
}));
|
270
|
+
})
|
271
|
+
}
|
233
272
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gmaps-autocomplete-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -123,6 +123,7 @@ files:
|
|
123
123
|
- README.md
|
124
124
|
- Rakefile
|
125
125
|
- VERSION
|
126
|
+
- gmaps-autocomplete-rails.gemspec
|
126
127
|
- lib/gmaps-autocomplete-rails.rb
|
127
128
|
- lib/gmaps-autocomplete/view_helper.rb
|
128
129
|
- spec/index.html
|
@@ -161,7 +162,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
162
|
version: '0'
|
162
163
|
segments:
|
163
164
|
- 0
|
164
|
-
hash:
|
165
|
+
hash: -4192616330667044491
|
165
166
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
167
|
none: false
|
167
168
|
requirements:
|