rails-google-maps 0.0.14 → 0.0.15
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
CHANGED
@@ -34,6 +34,12 @@ And include it in your ```application.js``` file after jquery:
|
|
34
34
|
|
35
35
|
## Usage
|
36
36
|
####SimpleForm usage:
|
37
|
+
Google maps autocomplete.
|
38
|
+
in ```application.js```:
|
39
|
+
```
|
40
|
+
//= require rails-google-maps/autocomplete
|
41
|
+
```
|
42
|
+
in template:
|
37
43
|
```erb
|
38
44
|
/*NOTE: gmap-canvas - default value and can be ommited*/
|
39
45
|
<%= f.input :address, as: :google_maps_autocomplete, input_html: { gmap_id: 'gmap_canvas' } %>
|
@@ -41,6 +47,8 @@ And include it in your ```application.js``` file after jquery:
|
|
41
47
|
<div id="gmap_canvas"></div>
|
42
48
|
```
|
43
49
|
Additionally on edit address point will be marked on the map.
|
50
|
+
|
51
|
+
That is all, if you want to use it without SimpleForm read next part.
|
44
52
|
####Javascript usage:
|
45
53
|
1) Apply google map to div element where map should appear:
|
46
54
|
```js
|
@@ -60,9 +68,9 @@ new GoogleMap({longitudeInput: '#longitude_input', latitudeInput: '#latitude_inp
|
|
60
68
|
```js
|
61
69
|
gmap = new GoogleMap()
|
62
70
|
gmap.apply()
|
63
|
-
gmap.
|
71
|
+
gmap.setMarker('address', 'New York')
|
64
72
|
//or
|
65
|
-
gmap.
|
73
|
+
gmap.setMarker('latLng', new google.maps.LatLng(51.751724,-1.255284))
|
66
74
|
```
|
67
75
|
|
68
76
|
4) Prevent users from changing location:
|
@@ -2,13 +2,16 @@ class GoogleMapsAutocompleteInput < SimpleForm::Inputs::StringInput
|
|
2
2
|
include ActionView::Helpers::TagHelper
|
3
3
|
def input
|
4
4
|
gmap_id = input_html_options.delete(:gmap_id)
|
5
|
+
apply = input_html_options.key?(:apply) ? input_html_options.delete(:apply) : true
|
6
|
+
lat_id = input_html_options.key?(:lat_id) ? input_html_options.delete(:lat_id) : nil
|
7
|
+
lng_id = input_html_options.key?(:lng_id) ? input_html_options.delete(:lng_id) : nil
|
5
8
|
input = @builder.text_field(attribute_name, input_html_options)
|
6
|
-
(input + content_tag('script', script_text(gmap_id, input).html_safe)).html_safe
|
9
|
+
(input + content_tag('script', script_text(gmap_id, input, apply, lat_id, lng_id).html_safe)).html_safe
|
7
10
|
end
|
8
11
|
|
9
12
|
private
|
10
13
|
|
11
|
-
def script_text(gmap_id, tag)
|
14
|
+
def script_text(gmap_id, tag, apply, lat_id, lng_id)
|
12
15
|
"$(document).ready(function(){
|
13
16
|
if(typeof google == 'undefined')
|
14
17
|
return;
|
@@ -20,11 +23,14 @@ class GoogleMapsAutocompleteInput < SimpleForm::Inputs::StringInput
|
|
20
23
|
input = $('#{tag}');
|
21
24
|
var id = input.attr('id');
|
22
25
|
var location = input.val();
|
23
|
-
window.
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
26
|
+
window.gmapAutocomplete = new GmapAutocomplete('#' + id, gmap);
|
27
|
+
if(#{apply.to_s}){
|
28
|
+
gmap.apply();
|
29
|
+
gmapAutocomplete.apply();
|
30
|
+
}
|
31
|
+
var latId = '#{lat_id.to_s}', lngId = '#{lng_id.to_s}';
|
32
|
+
if(latId && lngId){
|
33
|
+
gmap.setOptions({longitudeInput: lngId, latitudeInput: latId});
|
28
34
|
}
|
29
35
|
})"
|
30
36
|
end
|
@@ -48,8 +48,12 @@ class root.GmapAutocomplete extends Autocomplete
|
|
48
48
|
self.gmap.update ui.item.geocode
|
49
49
|
|
50
50
|
afterApply: ()->
|
51
|
+
this.syncWithMap()
|
51
52
|
this._addKeyDownHandlers()
|
52
53
|
|
54
|
+
syncWithMap: ()->
|
55
|
+
@gmap.setMarker('address', $(@selector).val()) if $(@selector).val()
|
56
|
+
|
53
57
|
_addKeyDownHandlers: ()->
|
54
58
|
self = this
|
55
59
|
$(@selector).bind 'keydown', (event)->
|
@@ -12,7 +12,7 @@ class root.GoogleMap
|
|
12
12
|
mapSelector: "#gmaps-canvas"
|
13
13
|
errorField: "#gmaps-error"
|
14
14
|
onSucceed: []
|
15
|
-
|
15
|
+
mapless: false
|
16
16
|
_applied: false
|
17
17
|
|
18
18
|
@defaultGmapOptions: {
|
@@ -25,6 +25,9 @@ class root.GoogleMap
|
|
25
25
|
# gmapOptions: google map api options
|
26
26
|
constructor: (options = {}, gmapOptions = {})->
|
27
27
|
@gmapOptions = $.extend {}, GoogleMap.defaultGmapOptions, gmapOptions
|
28
|
+
this.setOptions options
|
29
|
+
|
30
|
+
setOptions: (options)->
|
28
31
|
@immutable = true if options['immutable']
|
29
32
|
@mapSelector = options['selector'] if options['selector']
|
30
33
|
@errorField = options['errorField'] if options['errorField']
|
@@ -33,10 +36,14 @@ class root.GoogleMap
|
|
33
36
|
@longitudeInput = options['longitudeInput']
|
34
37
|
@latitudeInput = options['latitudeInput']
|
35
38
|
|
39
|
+
|
36
40
|
apply: ()->
|
37
|
-
|
41
|
+
if($(@mapSelector).length > 0)
|
42
|
+
@map = new google.maps.Map $(@mapSelector)[0], @gmapOptions
|
43
|
+
@marker = new google.maps.Marker {map: @map, draggable: true}
|
44
|
+
else
|
45
|
+
@mapless = true
|
38
46
|
@geocoder = new google.maps.Geocoder()
|
39
|
-
@marker = new google.maps.Marker {map: @map, draggable: true}
|
40
47
|
@gmapErrors = new GmapErrors @errorField
|
41
48
|
this._addListeners()
|
42
49
|
@_applied = true
|
@@ -44,7 +51,7 @@ class root.GoogleMap
|
|
44
51
|
applied: ()->
|
45
52
|
@_applied
|
46
53
|
|
47
|
-
setMarker: (type, value, update = true)->
|
54
|
+
setMarker: (type, value, update = true, afterCallback = ()->)->
|
48
55
|
request = {}
|
49
56
|
request[type] = value
|
50
57
|
self = this
|
@@ -54,6 +61,7 @@ class root.GoogleMap
|
|
54
61
|
self._succeed(results, update)
|
55
62
|
else
|
56
63
|
self._failed(update, type, value)
|
64
|
+
afterCallback()
|
57
65
|
|
58
66
|
searchGeocodes: (term, callback)->
|
59
67
|
@geocoder.geocode {'address': term }, (results, status)->
|
@@ -61,37 +69,44 @@ class root.GoogleMap
|
|
61
69
|
|
62
70
|
|
63
71
|
update: (geocode)->
|
64
|
-
@
|
65
|
-
|
72
|
+
unless @mapless
|
73
|
+
@map.fitBounds geocode.geometry.viewport
|
74
|
+
@marker.setPosition geocode.geometry.location
|
75
|
+
this.saveLatLang(geocode.geometry) if @saveLangLat
|
66
76
|
|
67
77
|
_addListeners: ()->
|
68
78
|
self = this
|
69
79
|
return if @immutable
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
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
|
75
86
|
|
76
87
|
_succeed: (results, update)->
|
77
88
|
if results[0]
|
78
89
|
this.update(results[0]) if update
|
79
90
|
$.map @onSucceed, (callback)->
|
80
91
|
callback(results[0].formatted_address)
|
81
|
-
this.
|
92
|
+
this.saveLatLang(results[0].geometry) if @saveLangLat
|
82
93
|
else
|
83
94
|
@gmapErrors.wrongInputError()
|
84
95
|
|
85
96
|
_failed: (update, type, value)->
|
86
|
-
this.
|
97
|
+
this.clearLatLng() if @saveLangLat
|
87
98
|
if type is 'address'
|
88
99
|
@gmapErrors.incorrectAddress(value)
|
89
100
|
else
|
90
101
|
@gmapErrors.incorrectLatlng()
|
91
102
|
|
92
|
-
|
93
|
-
$(@latitudeInput).val(lat)
|
94
|
-
$(@longitudeInput).val(
|
103
|
+
saveLatLang: (geometry)->
|
104
|
+
$(@latitudeInput).val(geometry.location.lat())
|
105
|
+
$(@longitudeInput).val(geometry.location.lng())
|
106
|
+
|
107
|
+
clearLatLng: ()->
|
108
|
+
$(@latitudeInput).val('')
|
109
|
+
$(@longitudeInput).val('')
|
95
110
|
|
96
111
|
# Class for displaying Gmap Errors.
|
97
112
|
# All the errors can be customised
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-google-maps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.15
|
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: 2013-04-
|
12
|
+
date: 2013-04-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|