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 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.marker_field :map, {:lat => :latitude, :lng => :longitude}, {:style => "width:890px;height:400px;"} %>
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
- ![Marker field in use](http://img205.imageshack.us/img205/9493/screenshotfrom201205231.png)
69
+ ![Marker field in use](https://raw.githubusercontent.com/galetahub/rails-marker/master/screenshots/rails-marker-in-use.png)
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) 2013 Fodojo, released under the MIT license
79
+ Copyright (c) 2017 Fodojo, released under the MIT license
@@ -0,0 +1,2 @@
1
+ //= require marker/map_google
2
+ //= require marker/init
@@ -0,0 +1,8 @@
1
+ initMarkerMap = () ->
2
+ elements = document.querySelectorAll('[data-marker]')
3
+
4
+ elements.forEach (el, index, array) ->
5
+ options = { zoom: el.getAttribute('data-zoom') }
6
+ map = new MapGoogle(el.id, options)
7
+
8
+ window['initMarkerMap'] = initMarkerMap
@@ -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
- field_lat: "#lat"
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(@dom_id)
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
- $(@options.field_lat).val pos.lat()
26
- $(@options.field_lng).val pos.lng()
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
- $(@options.field_zoom).val @map.getZoom()
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: (dom_id, options = {}) ->
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(document.getElementById(dom_id), settings)
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 "http://maps.google.com/maps/api/js?sensor=false&language=#{I18n.locale}" %>
2
- <%= javascript_include_tag "marker/map_google.js" %>
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
- <%= fields_for(field.object_name, field.object) do |f| -%>
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 "marker.hooks" do
19
- require "marker/hooks/simple_form" if Object.const_defined?("SimpleForm")
20
- require "marker/hooks/formtastic" if Object.const_defined?("Formtastic")
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 = { :object_name => object_name, :method_name => method_name }.merge(options)
14
-
15
- @template, @options, @html_options = template, options.dup, html_options.dup
16
- @engine = (@options.delete(:engine) || "google")
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 = { :field => self }.merge(locals)
23
- @template.render :partial => "marker/#{@engine}", :locals => @options.merge(locals)
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, [method_name, 'marker'].join('_'))
32
+ @id ||= @template.dom_id(@object, method_name)
28
33
  end
29
-
34
+
30
35
  def input_options
31
- @input_options ||= {:zoom => :zoom, :lat => :latitude, :lng => :longitude}.merge(@options)
32
- end
33
-
34
- def map_options
35
- {
36
- :field_lat => "##{sanitized_object_name}_#{input_options[:lat]}",
37
- :field_lng => "##{sanitized_object_name}_#{input_options[:lng]}",
38
- :field_zoom => "##{sanitized_object_name}_#{input_options[:zoom]}"
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("marker_field_tag", @object_name, method, objectify_options(options), html_options)
12
+ @template.send('marker_field_tag', @object_name, method, objectify_options(options), html_options)
13
13
  end
14
14
  end
15
15
  end
@@ -1,7 +1,6 @@
1
1
  module Marker
2
2
  module Helpers
3
3
  module FormTagHelper
4
-
5
4
  # A helper that renders file map container
6
5
  #
7
6
  # <%= marker_field_tag :office, :marker %>
@@ -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
- class MarkerInput < SimpleForm::Inputs::Base
4
- def input
5
- @builder.marker_field(attribute_name, options, input_html_options)
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
@@ -1,3 +1,3 @@
1
1
  module Marker
2
- VERSION = "0.0.3".freeze
2
+ VERSION = '0.1.0'.freeze
3
3
  end
@@ -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.3
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: 2013-02-08 00:00:00.000000000 Z
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
- - app/views/marker/_google.html.erb
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
- - lib/marker/hooks/simple_form.rb
41
- - lib/marker/hooks/formtastic.rb
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/rails-marker.rb
48
- - lib/marker.rb
49
- - MIT-LICENSE
50
- - Rakefile
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: 1.8.23
70
+ rubygems_version: 2.6.12
73
71
  signing_key:
74
- specification_version: 3
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"