rails-marker 0.0.3 → 0.1.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 +7 -0
- data/README.md +15 -5
- data/app/assets/javascripts/marker/application.js +2 -0
- data/app/assets/javascripts/marker/init.js.coffee +8 -0
- data/app/assets/javascripts/marker/map_google.js.coffee +40 -30
- data/app/views/marker/_google.html.erb +3 -15
- data/lib/marker.rb +12 -3
- data/lib/marker/engine.rb +6 -13
- data/lib/marker/helpers/field_tag.rb +26 -27
- data/lib/marker/helpers/form_builder.rb +2 -2
- data/lib/marker/helpers/form_tag_helper.rb +0 -1
- data/lib/marker/hooks/formtastic.rb +2 -3
- data/lib/marker/hooks/simple_form.rb +11 -3
- data/lib/marker/version.rb +1 -1
- data/lib/rails_marker.rb +1 -0
- metadata +21 -23
- data/lib/rails-marker.rb +0 -1
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f90f12acb68e225028bdbd6bd0058b55421b206b
|
4
|
+
data.tar.gz: e82af4dc4585582cd6bb6046f6d6cade0005cf18
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fbfcb56150811d7e5e16dd14dc4f92fba8b4ae6a0f085ba6a33079025e97d89dd62e662f7537775bd1ba8d021b9b313a2baab6f9b6fa20c7dbed7df11840527b
|
7
|
+
data.tar.gz: 879d3529328ddf969614bfba24419b92a72f48ecfd217d801c51127926819cc7aabb99d78419cc4b1d1b4e9b56258e568255a0fc09dd60bcb2dc850b2369dfc1
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ Form helpers for edit fields such as zoom, longitude and latitude
|
|
6
6
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
|
-
gem 'rails-marker'
|
9
|
+
gem 'rails-marker', require: 'marker'
|
10
10
|
|
11
11
|
And then execute:
|
12
12
|
|
@@ -16,6 +16,12 @@ Or install it yourself as:
|
|
16
16
|
|
17
17
|
$ gem install rails-marker
|
18
18
|
|
19
|
+
## Configure
|
20
|
+
|
21
|
+
Get Google API key here https://developers.google.com/maps/documentation/javascript/get-api-key
|
22
|
+
|
23
|
+
Marker.google_api_key = 'your_google_api_key'
|
24
|
+
|
19
25
|
## Usage
|
20
26
|
|
21
27
|
For example you have model office:
|
@@ -41,7 +47,7 @@ For example you have model office:
|
|
41
47
|
class Office < ActiveRecord::Base
|
42
48
|
validates_presence_of :title, :address
|
43
49
|
validates_numericality_of :latitude, :longitude
|
44
|
-
|
50
|
+
|
45
51
|
attr_accessible :address, :email, :latitude, :longitude, :phone, :title, :is_visible, :zoom
|
46
52
|
end
|
47
53
|
```
|
@@ -50,13 +56,17 @@ And you want edit fields zoom, longitude and latitude:
|
|
50
56
|
|
51
57
|
``` erb
|
52
58
|
<%= form_for @office do |f| %>
|
53
|
-
<%= f.
|
59
|
+
<%= f.text_field :longitude, data: { map: 'lng' } %>
|
60
|
+
<%= f.text_field :latitude, data: { map: 'lat' } %>
|
61
|
+
<%= f.text_field :zoom, data: { map: 'zoom' } %>
|
62
|
+
|
63
|
+
<%= f.marker_field :map %>
|
54
64
|
<% end %>
|
55
65
|
```
|
56
66
|
Also support SimpleForm and Formtastic implementation.
|
57
67
|
It's all you need! Just move the marker, and zoom, latitude and longitude fields will be automatically filled:
|
58
68
|
|
59
|
-

|
60
70
|
|
61
71
|
## Contributing
|
62
72
|
|
@@ -66,4 +76,4 @@ It's all you need! Just move the marker, and zoom, latitude and longitude fields
|
|
66
76
|
4. Push to the branch (`git push origin my-new-feature`)
|
67
77
|
5. Create new Pull Request
|
68
78
|
|
69
|
-
Copyright (c)
|
79
|
+
Copyright (c) 2017 Fodojo, released under the MIT license
|
@@ -1,78 +1,88 @@
|
|
1
1
|
$ = jQuery
|
2
2
|
|
3
3
|
class MapGoogle
|
4
|
-
|
5
4
|
constructor: (@dom_id, options = {}) ->
|
6
5
|
defaults =
|
7
6
|
lat: 50.44067063154785
|
8
7
|
lng: 30.52654266357422
|
9
8
|
zoom: 6
|
10
|
-
|
11
|
-
field_lng: "#lng"
|
12
|
-
field_zoom: "#zoom"
|
13
|
-
|
9
|
+
|
14
10
|
@options = $.extend defaults, options
|
11
|
+
|
12
|
+
@element = document.getElementById(@dom_id)
|
13
|
+
@name = @element.getAttribute('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
|
+
|
15
19
|
this._setup()
|
16
|
-
|
20
|
+
|
17
21
|
_setup: ->
|
18
22
|
@location = this._build_location()
|
19
|
-
@map = this._build_map(@
|
23
|
+
@map = this._build_map(@element)
|
20
24
|
@marker = this._build_marker()
|
21
|
-
|
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
|
+
console.log @field_lat
|
31
|
+
|
22
32
|
google.maps.event.addListener(@marker, 'dragend', (event) =>
|
23
33
|
pos = @marker.getPosition()
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
34
|
+
|
35
|
+
@field_lat.val pos.lat()
|
36
|
+
@field_lng.val pos.lng()
|
37
|
+
|
28
38
|
@map.setCenter(event.latLng)
|
29
39
|
)
|
30
|
-
|
40
|
+
|
31
41
|
google.maps.event.addListener(@map, 'zoom_changed', () =>
|
32
|
-
|
42
|
+
@field_zoom.val @map.getZoom()
|
33
43
|
)
|
34
|
-
|
44
|
+
|
35
45
|
placeMarker: (location) ->
|
36
46
|
marker = this._build_marker {position: location}
|
37
47
|
|
38
48
|
@map.setCenter(location);
|
39
|
-
|
49
|
+
|
40
50
|
return marker
|
41
|
-
|
51
|
+
|
42
52
|
_build_location: ->
|
43
53
|
lat = this._parse_value @options.field_lat, @options.lat
|
44
54
|
lng = this._parse_value @options.field_lng, @options.lng
|
45
|
-
|
55
|
+
|
46
56
|
new google.maps.LatLng(lat, lng)
|
47
|
-
|
48
|
-
_build_map: (
|
57
|
+
|
58
|
+
_build_map: (element, options = {}) ->
|
49
59
|
zoom = this._parse_value @options.field_zoom, @options.zoom
|
50
|
-
|
60
|
+
|
51
61
|
defaults =
|
52
62
|
zoom: zoom
|
53
63
|
center: @location
|
54
64
|
mapTypeId: google.maps.MapTypeId.ROADMAP
|
55
|
-
|
65
|
+
|
56
66
|
settings = $.extend defaults, options
|
57
|
-
|
58
|
-
new google.maps.Map(
|
59
|
-
|
67
|
+
|
68
|
+
new google.maps.Map(element, settings)
|
69
|
+
|
60
70
|
_build_marker: (options = {}) ->
|
61
71
|
defaults =
|
62
72
|
position: @location
|
63
73
|
map: @map
|
64
74
|
draggable: true
|
65
|
-
|
75
|
+
|
66
76
|
settings = $.extend defaults, options
|
67
|
-
|
77
|
+
|
68
78
|
new google.maps.Marker(settings)
|
69
|
-
|
79
|
+
|
70
80
|
_parse_value: (field, default_value) ->
|
71
81
|
value = parseFloat $(field).val()
|
72
|
-
|
82
|
+
|
73
83
|
if value
|
74
84
|
return value
|
75
85
|
else
|
76
|
-
return default_value
|
86
|
+
return parseFloat(default_value)
|
77
87
|
|
78
88
|
window.MapGoogle = MapGoogle
|
@@ -1,16 +1,4 @@
|
|
1
|
-
<%= javascript_include_tag
|
2
|
-
<%= javascript_include_tag "
|
1
|
+
<%= javascript_include_tag 'marker/application' %>
|
2
|
+
<%= javascript_include_tag "https://maps.googleapis.com/maps/api/js?key=#{Marker.google_api_key}&callback=initMarkerMap", async: true, defer: true %>
|
3
3
|
|
4
|
-
<%=
|
5
|
-
<%= f.hidden_field field.input_options[:lat] %>
|
6
|
-
<%= f.hidden_field field.input_options[:lng] %>
|
7
|
-
<%= f.hidden_field field.input_options[:zoom] %>
|
8
|
-
<% end -%>
|
9
|
-
|
10
|
-
<%= content_tag :div, nil, field.html_options %>
|
11
|
-
|
12
|
-
<script type="text/javascript">
|
13
|
-
$(document).ready(function(){
|
14
|
-
new MapGoogle("<%= field.html_options[:id] %>", <%=raw field.map_options.to_json %>);
|
15
|
-
});
|
16
|
-
</script>
|
4
|
+
<%= content_tag :div, nil, field.input_options %>
|
data/lib/marker.rb
CHANGED
@@ -1,10 +1,19 @@
|
|
1
|
-
require "marker/version"
|
2
|
-
require "marker/engine"
|
3
|
-
|
4
1
|
module Marker
|
2
|
+
# View helpers
|
5
3
|
module Helpers
|
6
4
|
autoload :FormTagHelper, 'marker/helpers/form_tag_helper'
|
7
5
|
autoload :FormBuilder, 'marker/helpers/form_builder'
|
8
6
|
autoload :FieldTag, 'marker/helpers/field_tag'
|
9
7
|
end
|
8
|
+
|
9
|
+
def self.google_api_key=(value)
|
10
|
+
@google_api_key = value
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.google_api_key
|
14
|
+
@google_api_key || ENV['GOOGLE_API_KEY']
|
15
|
+
end
|
10
16
|
end
|
17
|
+
|
18
|
+
require 'marker/engine'
|
19
|
+
require 'marker/version'
|
data/lib/marker/engine.rb
CHANGED
@@ -1,23 +1,16 @@
|
|
1
|
-
require 'rails'
|
2
|
-
require 'marker'
|
3
|
-
|
4
1
|
module Marker
|
2
|
+
# Rails engine
|
5
3
|
class Engine < ::Rails::Engine
|
6
|
-
|
7
|
-
initializer "marker.assets_precompile", :group => :all do |app|
|
8
|
-
app.config.assets.precompile += ["marker/map_google.js"]
|
9
|
-
end
|
10
|
-
|
11
|
-
initializer "marker.helpers" do
|
4
|
+
initializer 'marker.helpers' do
|
12
5
|
ActiveSupport.on_load :action_view do
|
13
6
|
ActionView::Base.send(:include, Marker::Helpers::FormTagHelper)
|
14
7
|
ActionView::Helpers::FormBuilder.send(:include, Marker::Helpers::FormBuilder)
|
15
8
|
end
|
16
9
|
end
|
17
|
-
|
18
|
-
initializer
|
19
|
-
require
|
20
|
-
require
|
10
|
+
|
11
|
+
initializer 'marker.hooks' do
|
12
|
+
require 'marker/hooks/simple_form' if Object.const_defined?('SimpleForm')
|
13
|
+
require 'marker/hooks/formtastic' if Object.const_defined?('Formtastic')
|
21
14
|
end
|
22
15
|
end
|
23
16
|
end
|
@@ -2,7 +2,10 @@ module Marker
|
|
2
2
|
module Helpers
|
3
3
|
class FieldTag
|
4
4
|
attr_reader :template, :object, :engine, :html_options
|
5
|
-
|
5
|
+
|
6
|
+
DEFAULT_MAP_ENGINE = 'google'.freeze
|
7
|
+
DEFAULT_STYLE = 'width:800px;height:400px'.freeze
|
8
|
+
|
6
9
|
# Wrapper for render marker field
|
7
10
|
# Usage:
|
8
11
|
#
|
@@ -10,46 +13,42 @@ module Marker
|
|
10
13
|
# marker.to_s
|
11
14
|
#
|
12
15
|
def initialize(object_name, method_name, template, options = {}, html_options = {}) #:nodoc:
|
13
|
-
options = { :
|
14
|
-
|
15
|
-
@
|
16
|
-
|
16
|
+
@options = { object_name: object_name, method_name: method_name }.merge!(options)
|
17
|
+
@template = template
|
18
|
+
@html_options = html_options
|
19
|
+
|
20
|
+
@engine = (@options.delete(:engine) || DEFAULT_MAP_ENGINE)
|
17
21
|
@object = (@options.delete(:object) || @template.instance_variable_get("@#{object_name}"))
|
22
|
+
|
18
23
|
@html_options[:id] ||= id
|
19
24
|
end
|
20
|
-
|
25
|
+
|
21
26
|
def to_s(locals = {}) #:nodoc:
|
22
|
-
locals = { :
|
23
|
-
@template.render :
|
27
|
+
locals = { field: self }.merge!(locals)
|
28
|
+
@template.render partial: "marker/#{@engine}", locals: locals
|
24
29
|
end
|
25
|
-
|
30
|
+
|
26
31
|
def id
|
27
|
-
@id ||= @template.dom_id(@object,
|
32
|
+
@id ||= @template.dom_id(@object, method_name)
|
28
33
|
end
|
29
|
-
|
34
|
+
|
30
35
|
def input_options
|
31
|
-
@input_options ||= {
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
:
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
|
36
|
+
@input_options ||= {
|
37
|
+
data: {
|
38
|
+
marker: method_name,
|
39
|
+
zoom: @html_options[:zoom]
|
40
|
+
},
|
41
|
+
style: DEFAULT_STYLE
|
42
|
+
}.merge!(@html_options)
|
43
|
+
end
|
44
|
+
|
42
45
|
def method_name
|
43
46
|
@options[:method_name]
|
44
47
|
end
|
45
|
-
|
48
|
+
|
46
49
|
def object_name
|
47
50
|
@options[:object_name]
|
48
51
|
end
|
49
|
-
|
50
|
-
def sanitized_object_name
|
51
|
-
@sanitized_object_name ||= object_name.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
|
52
|
-
end
|
53
52
|
end
|
54
53
|
end
|
55
54
|
end
|
@@ -3,13 +3,13 @@ module Marker
|
|
3
3
|
module FormBuilder
|
4
4
|
# Render map field
|
5
5
|
# Usage:
|
6
|
-
#
|
6
|
+
#
|
7
7
|
# <%= form_for @office do |f| %>
|
8
8
|
# <%= f.marker_field :marker %>
|
9
9
|
# <%= end %>
|
10
10
|
#
|
11
11
|
def marker_field(method, options = {}, html_options = {})
|
12
|
-
@template.send(
|
12
|
+
@template.send('marker_field_tag', @object_name, method, objectify_options(options), html_options)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
@@ -2,11 +2,10 @@ require 'formtastic'
|
|
2
2
|
|
3
3
|
class MarkerInput
|
4
4
|
include Formtastic::Inputs::Base
|
5
|
-
|
5
|
+
|
6
6
|
def to_html
|
7
7
|
input_wrapping do
|
8
|
-
label_html <<
|
9
|
-
builder.marker_field(method, options, input_html_options)
|
8
|
+
label_html << builder.marker_field(method, options, input_html_options)
|
10
9
|
end
|
11
10
|
end
|
12
11
|
end
|
@@ -1,7 +1,15 @@
|
|
1
1
|
require 'simple_form'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
module Marker
|
4
|
+
module Hooks
|
5
|
+
module SimpleForm
|
6
|
+
class MarkerInput < ::SimpleForm::Inputs::Base
|
7
|
+
def input(_wrapper_options = nil)
|
8
|
+
@builder.marker_field(attribute_name, options, input_html_options)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
6
12
|
end
|
7
13
|
end
|
14
|
+
|
15
|
+
::SimpleForm::FormBuilder.map_type :marker, to: Marker::Hooks::SimpleForm::MarkerInput
|
data/lib/marker/version.rb
CHANGED
data/lib/rails_marker.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'marker'
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-marker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Igor Galeta
|
@@ -10,22 +9,20 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2017-05-13 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: sqlite3
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - ">="
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: '0'
|
23
21
|
type: :development
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
|
-
- -
|
25
|
+
- - ">="
|
29
26
|
- !ruby/object:Gem::Version
|
30
27
|
version: '0'
|
31
28
|
description: Form helpers for edit fields such as zoom, longitude and latitude
|
@@ -35,42 +32,43 @@ executables: []
|
|
35
32
|
extensions: []
|
36
33
|
extra_rdoc_files: []
|
37
34
|
files:
|
38
|
-
-
|
35
|
+
- MIT-LICENSE
|
36
|
+
- README.md
|
37
|
+
- Rakefile
|
38
|
+
- app/assets/javascripts/marker/application.js
|
39
|
+
- app/assets/javascripts/marker/init.js.coffee
|
39
40
|
- app/assets/javascripts/marker/map_google.js.coffee
|
40
|
-
-
|
41
|
-
- lib/marker
|
42
|
-
- lib/marker/version.rb
|
41
|
+
- app/views/marker/_google.html.erb
|
42
|
+
- lib/marker.rb
|
43
43
|
- lib/marker/engine.rb
|
44
|
-
- lib/marker/helpers/form_builder.rb
|
45
44
|
- lib/marker/helpers/field_tag.rb
|
45
|
+
- lib/marker/helpers/form_builder.rb
|
46
46
|
- lib/marker/helpers/form_tag_helper.rb
|
47
|
-
- lib/
|
48
|
-
- lib/marker.rb
|
49
|
-
-
|
50
|
-
-
|
51
|
-
- README.md
|
47
|
+
- lib/marker/hooks/formtastic.rb
|
48
|
+
- lib/marker/hooks/simple_form.rb
|
49
|
+
- lib/marker/version.rb
|
50
|
+
- lib/rails_marker.rb
|
52
51
|
homepage: https://github.com/galetahub/rails-marker
|
53
52
|
licenses: []
|
53
|
+
metadata: {}
|
54
54
|
post_install_message:
|
55
55
|
rdoc_options: []
|
56
56
|
require_paths:
|
57
57
|
- lib
|
58
58
|
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
-
none: false
|
60
59
|
requirements:
|
61
|
-
- -
|
60
|
+
- - ">="
|
62
61
|
- !ruby/object:Gem::Version
|
63
62
|
version: '0'
|
64
63
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
64
|
requirements:
|
67
|
-
- -
|
65
|
+
- - ">="
|
68
66
|
- !ruby/object:Gem::Version
|
69
67
|
version: '0'
|
70
68
|
requirements: []
|
71
69
|
rubyforge_project:
|
72
|
-
rubygems_version:
|
70
|
+
rubygems_version: 2.6.12
|
73
71
|
signing_key:
|
74
|
-
specification_version:
|
72
|
+
specification_version: 4
|
75
73
|
summary: Easy way to edit zoom, longitude and latitude
|
76
74
|
test_files: []
|
data/lib/rails-marker.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require "marker"
|