rails-marker 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 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"