activeadmin_latlng 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fbaab543e7297b4fccd31338707751cf8549e3b9
4
- data.tar.gz: e6a644616e3330d77fd7ae07b3ba3d2d724218f9
3
+ metadata.gz: 752cb8ab7b12852967a633c1d158f4378115c6a2
4
+ data.tar.gz: 1658d4a68d4156ff3b2c00f4d1353a7d8313a01d
5
5
  SHA512:
6
- metadata.gz: 56ef8388b1618a01d86b50a96cac1f9ce3f2c048f2736aec224025c9be5fd0863e4cf44f2b8db2e03f4195deb45f4d0c6da86ced0de897989aa0a845f07d67b3
7
- data.tar.gz: 6a17867bcbb870022b3de59d975192027fa68de52b96966f69f2737f9c713eb663e5ec4dc2f48799231896c4dcac8603fc7cfd311fc1c66dc75f1cce3d352cbb
6
+ metadata.gz: a85d7ecda364672bf201f328a2b656f16c31ca19ed4a7bb4f4acfd92ada2b96cdd1d94e56dd1c6cf59f2821197e3067b530abe0e53103bd551ebd1a6a8a4b0dd
7
+ data.tar.gz: 1a8fbc6b2a40b70d3be9c2a1004a56c0b3a3489a28435790ffe7bc892ba67aa796693773eacb1251492096d994fc00d0f4d91952d1306568dbd2a9143f82d597
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
+ # ActiveadminLatlng
2
+
1
3
  Active Admin latitude and longitude plugin
2
4
 
5
+ ![alt tag](https://raw.githubusercontent.com/forsaken1/activeadmin-latlng/master/aa_latlng.png)
6
+
3
7
 
4
8
 
5
9
  ## Getting started
@@ -23,13 +27,15 @@ end
23
27
 
24
28
  ## Settings
25
29
 
26
- * `lang` - language, `ru` by default
30
+ * `lang` - language, `en` by default.
31
+
32
+ * `map` - map provider, `google` by default. Available: `google`, `yandex`.
27
33
 
28
- * `map` - map provider, yandex maps by default
34
+ * `id_lat` and `id_lng` - identificator of latitude and longitude inputs. `<model_name>_lat` and `<model_name>_lng` by default.
29
35
 
30
- * `id_lat` and `id_lng` - identificator of latitude and longitude inputs, Moscow coords by default
36
+ * `height` - map height in pixels, `400` by default.
31
37
 
32
- * `height` - map height in pixels, 400 by default
38
+ * `loading_map` - loading map library. `true` by default. Set to `false`, if map loaded in other place.
33
39
 
34
40
 
35
41
 
@@ -39,4 +45,4 @@ Alexey Krylov
39
45
 
40
46
  ## License
41
47
 
42
- MIT License. Copyright 2016 Alexey Krylov
48
+ MIT License. Copyright 2016 Alexey Krylov
@@ -3,27 +3,90 @@ module ActiveAdmin
3
3
  class ActiveAdminForm
4
4
  def latlng **args
5
5
  class_name = form_builder.object.class.model_name.element
6
- lang = args[:lang] || 'en'
7
- map = args[:map] || :yandex
6
+ lang = args[:lang] || 'en'
7
+ map = args[:map] || :google
8
8
  id_lat = args[:id_lat] || "#{class_name}_lat"
9
9
  id_lng = args[:id_lng] || "#{class_name}_lng"
10
10
  height = args[:height] || 400
11
+ loading_map = args[:loading_map].nil? ? true : args[:loading_map]
11
12
 
12
13
  case map
13
14
  when :yandex
14
- insert_tag(YandexMapProxy, form_builder, lang, id_lat, id_lng, height)
15
+ insert_tag(YandexMapProxy, form_builder, lang, id_lat, id_lng, height, loading_map)
16
+ when :google
17
+ insert_tag(GoogleMapProxy, form_builder, lang, id_lat, id_lng, height, loading_map)
18
+ else
19
+ insert_tag(GoogleMapProxy, form_builder, lang, id_lat, id_lng, height, loading_map)
15
20
  end
16
21
  end
17
22
  end
18
23
 
19
- class YandexMapProxy < FormtasticProxy
24
+ class LatlngProxy < FormtasticProxy
20
25
  def build(form_builder, *args, &block)
21
- @lang, @id_lat, @id_lng, @height = *args
26
+ @lang, @id_lat, @id_lng, @height, @loading_map = *args
22
27
  end
28
+ end
29
+
30
+ class GoogleMapProxy < LatlngProxy
31
+ def to_s
32
+ loading_map_code = @loading_map ? "<script src=\"https://maps.googleapis.com/maps/api/js?language=#{@lang}&callback=googleMapObject.init\" async defer></script>" : ''
33
+ "<li>" \
34
+ "#{loading_map_code}" \
35
+ "<div id=\"google_map\" style=\"height: #{@height}px\"></div>" \
36
+ "<script>
37
+ var googleMapObject = {
38
+ coords: null,
39
+ map: null,
40
+ marker: null,
41
+
42
+ getCoordinates: function() {
43
+ return {
44
+ lat: parseFloat($(\"##{@id_lat}\").val()) || 55.7522200,
45
+ lng: parseFloat($(\"##{@id_lng}\").val()) || 37.6155600,
46
+ };
47
+ },
48
+
49
+ saveCoordinates: function() {
50
+ $(\"##{@id_lat}\").val( googleMapObject.coords.lat.toFixed(10) );
51
+ $(\"##{@id_lng}\").val( googleMapObject.coords.lng.toFixed(10) );
52
+ },
53
+
54
+ init: function() {
55
+ googleMapObject.coords = googleMapObject.getCoordinates();
56
+ googleMapObject.saveCoordinates();
57
+
58
+ googleMapObject.map = new google.maps.Map(document.getElementById('google_map'), {
59
+ center: googleMapObject.coords,
60
+ zoom: 12
61
+ });
62
+
63
+ var latLngCoord = new google.maps.LatLng(googleMapObject.coords.lat, googleMapObject.coords.lng);
64
+ googleMapObject.marker = new google.maps.Marker({
65
+ position: latLngCoord,
66
+ map: googleMapObject.map,
67
+ draggable: true
68
+ });
69
+ googleMapObject.map.addListener('click', function(e) {
70
+ googleMapObject.coords = { lat: e.latLng.lat(), lng: e.latLng.lng() };
71
+ googleMapObject.saveCoordinates();
72
+ googleMapObject.marker.setPosition(googleMapObject.coords);
73
+ });
74
+ googleMapObject.marker.addListener('drag', function(e) {
75
+ googleMapObject.coords = { lat: e.latLng.lat(), lng: e.latLng.lng() };
76
+ googleMapObject.saveCoordinates();
77
+ });
78
+ }
79
+ }
80
+ </script>" \
81
+ "</li>"
82
+ end
83
+ end
23
84
 
85
+ class YandexMapProxy < LatlngProxy
24
86
  def to_s
87
+ loading_map_code = @loading_map ? "<script src=\"https://api-maps.yandex.ru/2.1/?lang=#{@lang}&load=Map,Placemark\" type=\"text/javascript\"></script>" : ''
25
88
  "<li>" \
26
- "<script src=\"https://api-maps.yandex.ru/2.1/?lang=#{@lang}&load=Map,Placemark\" type=\"text/javascript\"></script>" \
89
+ "#{loading_map_code}" \
27
90
  "<div id=\"yandex_map\" style=\"height: #{@height}px\"></div>" \
28
91
  "<script type=\"text/javascript\">
29
92
  var yandexMapObject = {
@@ -1,3 +1,3 @@
1
1
  module ActiveadminLatlng
2
- VERSION = "0.0.3"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeadmin_latlng
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Krylov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-10 00:00:00.000000000 Z
11
+ date: 2016-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activeadmin