rails-marker 0.1.1 → 0.2.0
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 +5 -5
- data/MIT-LICENSE +1 -1
- data/README.md +17 -1
- data/Rakefile +3 -2
- data/app/assets/javascripts/marker/init.js +15 -0
- data/app/assets/javascripts/marker/map_google.js +146 -0
- data/app/views/marker/_google.html.erb +1 -1
- data/lib/marker/helpers/field_tag.rb +4 -0
- data/lib/marker/version.rb +1 -1
- metadata +24 -10
- data/app/assets/javascripts/marker/init.js.coffee +0 -7
- data/app/assets/javascripts/marker/map_google.js.coffee +0 -86
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: da6f80ba26d842eb913f298d647d3ae21588f5fe440c8aa2eda0538a8ae55fd0
|
4
|
+
data.tar.gz: 487b0f7160ce7cfd8ff789cfa8c1c77c1a321b79266431378d5526b02f383b8e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5cedf637c1472a4041282c371a5e1f8a57ec9b8fe8dd9ecef3c9c5a6a0daf9f2791b635cb3f5d6151e2d2feab67110f792da0864a3c341a43d9654b2e4bf9a0a
|
7
|
+
data.tar.gz: 5fccc7147dd2d35a1a73aea74467538f4413a818340da50ee553d06c171347ca877f1430e5933cb931d14b4ef0238752c7f908298b8de67e01adba96dc4d9291
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -58,7 +58,10 @@ And you want edit fields zoom, longitude and latitude:
|
|
58
58
|
<%= form_for @office do |f| %>
|
59
59
|
<%= f.text_field :longitude, data: { map: 'lng' } %>
|
60
60
|
<%= f.text_field :latitude, data: { map: 'lat' } %>
|
61
|
+
|
62
|
+
// Optional fields
|
61
63
|
<%= f.text_field :zoom, data: { map: 'zoom' } %>
|
64
|
+
<%= f.text_field :radius, data: { map: 'radius' } %>
|
62
65
|
|
63
66
|
<%= f.marker_field :map %>
|
64
67
|
<% end %>
|
@@ -68,6 +71,19 @@ It's all you need! Just move the marker, and zoom, latitude and longitude fields
|
|
68
71
|
|
69
72
|

|
70
73
|
|
74
|
+
### ActiveAdmin
|
75
|
+
|
76
|
+
Formtastic integration
|
77
|
+
|
78
|
+
``` ruby
|
79
|
+
f.inputs name: 'Location', for: [:location, f.object.location || f.object.build_location] do |loc|
|
80
|
+
loc.input :latitude, input_html: { data: { map: 'lat' } }
|
81
|
+
loc.input :longitude, input_html: { data: { map: 'lng' } }
|
82
|
+
loc.input :content, input_html: { rows: 2 }
|
83
|
+
loc.input :map, as: :marker, google_api_key: 'your_google_api_key'
|
84
|
+
end
|
85
|
+
```
|
86
|
+
|
71
87
|
## Contributing
|
72
88
|
|
73
89
|
1. Fork it
|
@@ -76,4 +92,4 @@ It's all you need! Just move the marker, and zoom, latitude and longitude fields
|
|
76
92
|
4. Push to the branch (`git push origin my-new-feature`)
|
77
93
|
5. Create new Pull Request
|
78
94
|
|
79
|
-
Copyright (c) 2017 Fodojo, released under the MIT license
|
95
|
+
Copyright (c) 2017 Fodojo LLC, released under the MIT license
|
data/Rakefile
CHANGED
@@ -1,2 +1,3 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/gem_tasks'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
(function() {
|
2
|
+
var initMarkerMap;
|
3
|
+
|
4
|
+
initMarkerMap = function() {
|
5
|
+
var elements;
|
6
|
+
elements = document.querySelectorAll('[data-marker]');
|
7
|
+
return elements.forEach(function(el, index, array) {
|
8
|
+
var map;
|
9
|
+
map = new MapGoogle(el);
|
10
|
+
return $(el).data('map', map);
|
11
|
+
});
|
12
|
+
};
|
13
|
+
|
14
|
+
window['initMarkerMap'] = initMarkerMap;
|
15
|
+
}).call(this);
|
@@ -0,0 +1,146 @@
|
|
1
|
+
(function() {
|
2
|
+
var $, MapGoogle;
|
3
|
+
|
4
|
+
$ = jQuery;
|
5
|
+
|
6
|
+
MapGoogle = (function() {
|
7
|
+
function MapGoogle(dom, options) {
|
8
|
+
var defaults;
|
9
|
+
this.dom = dom;
|
10
|
+
if (options == null) {
|
11
|
+
options = {};
|
12
|
+
}
|
13
|
+
defaults = {
|
14
|
+
lat: 50.44067063154785,
|
15
|
+
lng: 30.52654266357422,
|
16
|
+
zoom: 6,
|
17
|
+
radius: 1000
|
18
|
+
};
|
19
|
+
this.element = $(this.dom);
|
20
|
+
this.options = $.extend(defaults, this.element.data(), options);
|
21
|
+
this.name = this.element.data('marker');
|
22
|
+
this.options.field_lat = "[data-" + this.name + "='lat']";
|
23
|
+
this.options.field_lng = "[data-" + this.name + "='lng']";
|
24
|
+
this.options.field_zoom = "[data-" + this.name + "='zoom']";
|
25
|
+
this.options.field_radius = "[data-" + this.name + "='radius']";
|
26
|
+
|
27
|
+
this._setup();
|
28
|
+
}
|
29
|
+
|
30
|
+
MapGoogle.prototype._setup = function() {
|
31
|
+
var number;
|
32
|
+
|
33
|
+
this.location = this._build_location();
|
34
|
+
this.map = this._build_map(this.element.get(0));
|
35
|
+
this.marker = this._build_marker();
|
36
|
+
this.field_lat = $(this.options.field_lat + ':eq(0)');
|
37
|
+
this.field_lng = $(this.options.field_lng + ':eq(0)');
|
38
|
+
this.field_zoom = $(this.options.field_zoom + ':eq(0)');
|
39
|
+
this.field_radius = $(this.options.field_radius + ':eq(0)');
|
40
|
+
|
41
|
+
google.maps.event.addListener(this.marker, 'dragend', (function(_this) {
|
42
|
+
return function(event) {
|
43
|
+
return _this._update_location(event)
|
44
|
+
};
|
45
|
+
})(this));
|
46
|
+
google.maps.event.addListener(this.map, 'zoom_changed', (function(_this) {
|
47
|
+
return function() {
|
48
|
+
return _this.field_zoom.val(_this.map.getZoom());
|
49
|
+
};
|
50
|
+
})(this));
|
51
|
+
if (this.field_radius.length > 0) {
|
52
|
+
number = this._parse_value(this.field_radius, this.options.radius);
|
53
|
+
this.circle = this._build_circle({
|
54
|
+
radius: number
|
55
|
+
});
|
56
|
+
return this.circle.bindTo('center', this.marker, 'position');
|
57
|
+
}
|
58
|
+
};
|
59
|
+
|
60
|
+
MapGoogle.prototype.placeMarker = function(location) {
|
61
|
+
var marker;
|
62
|
+
marker = this._build_marker({
|
63
|
+
position: location
|
64
|
+
});
|
65
|
+
this.map.setCenter(location);
|
66
|
+
return marker;
|
67
|
+
};
|
68
|
+
|
69
|
+
MapGoogle.prototype._build_location = function() {
|
70
|
+
var lat, lng;
|
71
|
+
lat = this._parse_value(this.options.field_lat, this.options.lat);
|
72
|
+
lng = this._parse_value(this.options.field_lng, this.options.lng);
|
73
|
+
return new google.maps.LatLng(lat, lng);
|
74
|
+
};
|
75
|
+
|
76
|
+
MapGoogle.prototype._build_map = function(element, options) {
|
77
|
+
var defaults, settings, zoom;
|
78
|
+
if (options == null) {
|
79
|
+
options = {};
|
80
|
+
}
|
81
|
+
zoom = this._parse_value(this.options.field_zoom, this.options.zoom);
|
82
|
+
defaults = {
|
83
|
+
zoom: zoom,
|
84
|
+
center: this.location,
|
85
|
+
mapTypeId: google.maps.MapTypeId.ROADMAP
|
86
|
+
};
|
87
|
+
settings = $.extend(defaults, options);
|
88
|
+
return new google.maps.Map(element, settings);
|
89
|
+
};
|
90
|
+
|
91
|
+
MapGoogle.prototype._build_marker = function(options) {
|
92
|
+
var defaults, settings;
|
93
|
+
if (options == null) {
|
94
|
+
options = {};
|
95
|
+
}
|
96
|
+
defaults = {
|
97
|
+
position: this.location,
|
98
|
+
map: this.map,
|
99
|
+
draggable: true
|
100
|
+
};
|
101
|
+
settings = $.extend(defaults, options);
|
102
|
+
return new google.maps.Marker(settings);
|
103
|
+
};
|
104
|
+
|
105
|
+
MapGoogle.prototype._build_circle = function(options) {
|
106
|
+
var defaults, settings;
|
107
|
+
if (options == null) {
|
108
|
+
options = {};
|
109
|
+
}
|
110
|
+
defaults = {
|
111
|
+
map: this.map,
|
112
|
+
strokeColor: '#FF0000',
|
113
|
+
strokeOpacity: 0.8,
|
114
|
+
strokeWeight: 2,
|
115
|
+
fillColor: '#FF0000',
|
116
|
+
fillOpacity: 0.35,
|
117
|
+
radius: 1000
|
118
|
+
};
|
119
|
+
settings = $.extend(defaults, options);
|
120
|
+
return new google.maps.Circle(settings);
|
121
|
+
};
|
122
|
+
|
123
|
+
MapGoogle.prototype._update_location = function(event) {
|
124
|
+
var pos = this.marker.getPosition();
|
125
|
+
|
126
|
+
this.field_lat.val(pos.lat());
|
127
|
+
this.field_lng.val(pos.lng());
|
128
|
+
|
129
|
+
return this.map.setCenter(event.latLng);
|
130
|
+
};
|
131
|
+
|
132
|
+
MapGoogle.prototype._parse_value = function(field, default_value) {
|
133
|
+
var value;
|
134
|
+
value = parseFloat($(field).val());
|
135
|
+
if (value) {
|
136
|
+
return value;
|
137
|
+
} else {
|
138
|
+
return parseFloat(default_value);
|
139
|
+
}
|
140
|
+
};
|
141
|
+
|
142
|
+
return MapGoogle;
|
143
|
+
})();
|
144
|
+
|
145
|
+
window.MapGoogle = MapGoogle;
|
146
|
+
}).call(this);
|
@@ -1,4 +1,4 @@
|
|
1
1
|
<%= javascript_include_tag 'marker/application' %>
|
2
|
-
<%= javascript_include_tag "https://maps.googleapis.com/maps/api/js?key=#{
|
2
|
+
<%= javascript_include_tag "https://maps.googleapis.com/maps/api/js?key=#{field.google_api_key}&callback=initMarkerMap", async: true, defer: true %>
|
3
3
|
|
4
4
|
<%= content_tag :div, nil, field.input_options %>
|
data/lib/marker/version.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-marker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Galeta
|
8
8
|
- Pavlo Galeta
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-12-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
14
28
|
- !ruby/object:Gem::Dependency
|
15
29
|
name: sqlite3
|
16
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -36,8 +50,8 @@ files:
|
|
36
50
|
- README.md
|
37
51
|
- Rakefile
|
38
52
|
- app/assets/javascripts/marker/application.js
|
39
|
-
- app/assets/javascripts/marker/init.js
|
40
|
-
- app/assets/javascripts/marker/map_google.js
|
53
|
+
- app/assets/javascripts/marker/init.js
|
54
|
+
- app/assets/javascripts/marker/map_google.js
|
41
55
|
- app/views/marker/_google.html.erb
|
42
56
|
- lib/marker.rb
|
43
57
|
- lib/marker/engine.rb
|
@@ -49,9 +63,10 @@ files:
|
|
49
63
|
- lib/marker/version.rb
|
50
64
|
- lib/rails_marker.rb
|
51
65
|
homepage: https://github.com/galetahub/rails-marker
|
52
|
-
licenses:
|
66
|
+
licenses:
|
67
|
+
- MIT
|
53
68
|
metadata: {}
|
54
|
-
post_install_message:
|
69
|
+
post_install_message:
|
55
70
|
rdoc_options: []
|
56
71
|
require_paths:
|
57
72
|
- lib
|
@@ -66,9 +81,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
81
|
- !ruby/object:Gem::Version
|
67
82
|
version: '0'
|
68
83
|
requirements: []
|
69
|
-
|
70
|
-
|
71
|
-
signing_key:
|
84
|
+
rubygems_version: 3.3.7
|
85
|
+
signing_key:
|
72
86
|
specification_version: 4
|
73
87
|
summary: Easy way to edit zoom, longitude and latitude
|
74
88
|
test_files: []
|
@@ -1,86 +0,0 @@
|
|
1
|
-
$ = jQuery
|
2
|
-
|
3
|
-
class MapGoogle
|
4
|
-
constructor: (@dom, options = {}) ->
|
5
|
-
defaults =
|
6
|
-
lat: 50.44067063154785
|
7
|
-
lng: 30.52654266357422
|
8
|
-
zoom: 6
|
9
|
-
|
10
|
-
@element = $(@dom)
|
11
|
-
@options = $.extend defaults, @element.data(), options
|
12
|
-
|
13
|
-
@name = @element.data('marker')
|
14
|
-
|
15
|
-
@options.field_lat = "[data-#{@name}='lat']"
|
16
|
-
@options.field_lng = "[data-#{@name}='lng']"
|
17
|
-
@options.field_zoom = "[data-#{@name}='zoom']"
|
18
|
-
|
19
|
-
this._setup()
|
20
|
-
|
21
|
-
_setup: ->
|
22
|
-
@location = this._build_location()
|
23
|
-
@map = this._build_map(@element.get(0))
|
24
|
-
@marker = this._build_marker()
|
25
|
-
|
26
|
-
@field_lat = $(@options.field_lat + ':eq(0)')
|
27
|
-
@field_lng = $(@options.field_lng + ':eq(0)')
|
28
|
-
@field_zoom = $(@options.field_zoom + ':eq(0)')
|
29
|
-
|
30
|
-
google.maps.event.addListener(@marker, 'dragend', (event) =>
|
31
|
-
pos = @marker.getPosition()
|
32
|
-
|
33
|
-
@field_lat.val pos.lat()
|
34
|
-
@field_lng.val pos.lng()
|
35
|
-
|
36
|
-
@map.setCenter(event.latLng)
|
37
|
-
)
|
38
|
-
|
39
|
-
google.maps.event.addListener(@map, 'zoom_changed', () =>
|
40
|
-
@field_zoom.val @map.getZoom()
|
41
|
-
)
|
42
|
-
|
43
|
-
placeMarker: (location) ->
|
44
|
-
marker = this._build_marker {position: location}
|
45
|
-
|
46
|
-
@map.setCenter(location);
|
47
|
-
|
48
|
-
return marker
|
49
|
-
|
50
|
-
_build_location: ->
|
51
|
-
lat = this._parse_value @options.field_lat, @options.lat
|
52
|
-
lng = this._parse_value @options.field_lng, @options.lng
|
53
|
-
|
54
|
-
new google.maps.LatLng(lat, lng)
|
55
|
-
|
56
|
-
_build_map: (element, options = {}) ->
|
57
|
-
zoom = this._parse_value @options.field_zoom, @options.zoom
|
58
|
-
|
59
|
-
defaults =
|
60
|
-
zoom: zoom
|
61
|
-
center: @location
|
62
|
-
mapTypeId: google.maps.MapTypeId.ROADMAP
|
63
|
-
|
64
|
-
settings = $.extend defaults, options
|
65
|
-
|
66
|
-
new google.maps.Map(element, settings)
|
67
|
-
|
68
|
-
_build_marker: (options = {}) ->
|
69
|
-
defaults =
|
70
|
-
position: @location
|
71
|
-
map: @map
|
72
|
-
draggable: true
|
73
|
-
|
74
|
-
settings = $.extend defaults, options
|
75
|
-
|
76
|
-
new google.maps.Marker(settings)
|
77
|
-
|
78
|
-
_parse_value: (field, default_value) ->
|
79
|
-
value = parseFloat $(field).val()
|
80
|
-
|
81
|
-
if value
|
82
|
-
return value
|
83
|
-
else
|
84
|
-
return parseFloat(default_value)
|
85
|
-
|
86
|
-
window.MapGoogle = MapGoogle
|