gmaps4rails 1.4.8 → 1.5.0.pre
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.
- data/.gitignore +11 -0
- data/.travis.yml +10 -0
- data/Gemfile +9 -0
- data/Gemfile.lock +175 -0
- data/Guardfile +38 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +26 -37
- data/Rakefile +4 -0
- data/app/assets/javascripts/gmaps4rails/gmaps4rails.base.js.coffee +40 -34
- data/app/assets/javascripts/gmaps4rails/gmaps4rails.googlemaps.js.coffee +4 -2
- data/app/views/gmaps4rails/_gmaps4rails.html.erb +13 -12
- data/gmaps4rails.gemspec +38 -0
- data/lib/gmaps4rails.rb +0 -8
- data/lib/gmaps4rails/acts_as_gmappable.rb +55 -33
- data/lib/gmaps4rails/base.rb +7 -12
- data/lib/gmaps4rails/helper/gmaps4rails_helper.rb +16 -42
- data/lib/gmaps4rails/js_builder.rb +121 -0
- data/lib/gmaps4rails/json_builder.rb +127 -0
- data/lib/gmaps4rails/version.rb +3 -0
- data/lib/gmaps4rails/view_helper.rb +171 -0
- data/lib/tasks/gmaps4rails_tasks.rake +4 -0
- data/lib/tasks/jasmine.rake +8 -0
- data/public/javascripts/gmaps4rails/gmaps4rails.base.js +81 -30
- data/public/javascripts/gmaps4rails/gmaps4rails.bing.js +34 -11
- data/public/javascripts/gmaps4rails/gmaps4rails.googlemaps.js +45 -21
- data/public/javascripts/gmaps4rails/gmaps4rails.mapquest.js +33 -14
- data/public/javascripts/gmaps4rails/gmaps4rails.openlayers.js +33 -20
- data/spec/base/base_spec.rb +185 -0
- data/spec/base/geocoding_spec.rb +17 -0
- data/spec/dummy/.gitignore +2 -0
- data/spec/dummy/.rspec +1 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/assets/stylesheets/gmaps4rails.css +24 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/controllers/users_controller.rb +96 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.gitkeep +0 -0
- data/spec/dummy/app/models/.gitkeep +0 -0
- data/spec/dummy/app/models/user.rb +9 -0
- data/spec/dummy/app/views/layouts/application.html.erb +16 -0
- data/spec/dummy/app/views/users/_form.html.erb +37 -0
- data/spec/dummy/app/views/users/_my_template.html.erb +2 -0
- data/spec/dummy/app/views/users/_my_template2.html.erb +1 -0
- data/spec/dummy/app/views/users/ajax_data.js.erb +2 -0
- data/spec/dummy/app/views/users/ajax_test.html.erb +22 -0
- data/spec/dummy/app/views/users/edit.html.erb +6 -0
- data/spec/dummy/app/views/users/index.html.erb +238 -0
- data/spec/dummy/app/views/users/new.html.erb +5 -0
- data/spec/dummy/app/views/users/show.html.erb +30 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +62 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +60 -0
- data/spec/dummy/db/migrate/20120408170155_create_users.rb +16 -0
- data/spec/dummy/db/schema.rb +29 -0
- data/spec/dummy/lib/assets/.gitkeep +0 -0
- data/spec/dummy/log/.gitkeep +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/javascripts/Player.js +22 -0
- data/spec/dummy/public/javascripts/Song.js +7 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/factories/user_factory.rb +23 -0
- data/spec/javascripts/basic_methods_spec.js +103 -0
- data/spec/javascripts/helpers/.gitkeep +0 -0
- data/spec/javascripts/helpers/SpecHelper.js +87 -0
- data/spec/javascripts/map_spec.js +49 -0
- data/spec/javascripts/markers_methods_spec.js +368 -0
- data/spec/javascripts/mocks_spec.js +27 -0
- data/spec/javascripts/support/jasmine.yml +76 -0
- data/spec/javascripts/support/jasmine_config.rb +23 -0
- data/spec/javascripts/support/jasmine_runner.rb +20 -0
- data/spec/launchers/all_but_requests.rb +0 -0
- data/spec/launchers/all_specs.rb +0 -0
- data/spec/launchers/requests.rb +0 -0
- data/spec/models/user_spec.rb +447 -0
- data/spec/spec_helper.rb +44 -0
- data/spec/support/geocoding.rb +14 -0
- data/spec/support/matchers.rb +43 -0
- metadata +364 -31
- data/LICENSE.txt +0 -21
- data/app/assets/javascripts/gmaps4rails/all_apis.js +0 -5
- data/app/assets/javascripts/gmaps4rails/bing.js +0 -2
- data/app/assets/javascripts/gmaps4rails/googlemaps.js +0 -2
- data/app/assets/javascripts/gmaps4rails/mapquest.js +0 -2
- data/app/assets/javascripts/gmaps4rails/openlayers.js +0 -2
- data/app/views/gmaps4rails/_html.html.erb +0 -12
- data/app/views/gmaps4rails/_scripts.html.erb +0 -37
- data/lib/gmaps4rails/js_handler.rb +0 -112
- data/lib/gmaps4rails/json_handler.rb +0 -116
- data/public/images/marker.png +0 -0
|
@@ -34,6 +34,7 @@ class @Gmaps4RailsGoogle extends Gmaps4Rails
|
|
|
34
34
|
strokeWeight: 2
|
|
35
35
|
fillColor: "#000000"
|
|
36
36
|
fillOpacity: 0.35
|
|
37
|
+
clickable: false
|
|
37
38
|
|
|
38
39
|
#Polyline Styling
|
|
39
40
|
@polylines_conf = #default style for polylines
|
|
@@ -111,7 +112,7 @@ class @Gmaps4RailsGoogle extends Gmaps4Rails
|
|
|
111
112
|
markerLatLng = @createLatLng(args.Lat, args.Lng)
|
|
112
113
|
#Marker sizes are expressed as a Size of X,Y
|
|
113
114
|
if args.marker_picture == "" and args.rich_marker == null
|
|
114
|
-
defaultOptions = {position: markerLatLng, map: @map, title: args.marker_title, draggable: args.marker_draggable}
|
|
115
|
+
defaultOptions = {position: markerLatLng, map: @map, title: args.marker_title, draggable: args.marker_draggable, zIndex: args.zindex}
|
|
115
116
|
mergedOptions = @mergeObjectWithDefault @markers_conf.raw, defaultOptions
|
|
116
117
|
return new google.maps.Marker mergedOptions
|
|
117
118
|
|
|
@@ -123,6 +124,7 @@ class @Gmaps4RailsGoogle extends Gmaps4Rails
|
|
|
123
124
|
content: args.rich_marker
|
|
124
125
|
flat: if args.marker_anchor == null then false else args.marker_anchor[1]
|
|
125
126
|
anchor: if args.marker_anchor == null then 0 else args.marker_anchor[0]
|
|
127
|
+
zIndex: args.zindex
|
|
126
128
|
})
|
|
127
129
|
|
|
128
130
|
#default behavior
|
|
@@ -132,7 +134,7 @@ class @Gmaps4RailsGoogle extends Gmaps4Rails
|
|
|
132
134
|
#create or retrieve existing MarkerImages
|
|
133
135
|
markerImage = @createOrRetrieveImage(args.marker_picture, args.marker_width, args.marker_height, imageAnchorPosition)
|
|
134
136
|
shadowImage = @createOrRetrieveImage(args.shadow_picture, args.shadow_width, args.shadow_height, shadowAnchorPosition)
|
|
135
|
-
defaultOptions = {position: markerLatLng, map: @map, icon: markerImage, title: args.marker_title, draggable: args.marker_draggable, shadow: shadowImage}
|
|
137
|
+
defaultOptions = {position: markerLatLng, map: @map, icon: markerImage, title: args.marker_title, draggable: args.marker_draggable, shadow: shadowImage, zIndex: args.zindex}
|
|
136
138
|
mergedOptions = @mergeObjectWithDefault @markers_conf.raw, defaultOptions
|
|
137
139
|
return new google.maps.Marker mergedOptions
|
|
138
140
|
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
<% #thanks to enable_css, user can avoid this css to be loaded
|
|
2
|
-
if enable_css == true && options[:scripts].nil? %>
|
|
3
|
-
<% unless gmaps4rails_pipeline_enabled? %>
|
|
4
|
-
<% content_for :head do %>
|
|
5
|
-
<%= stylesheet_link_tag 'gmaps4rails' %>
|
|
6
|
-
<% end %>
|
|
7
|
-
<% end %>
|
|
8
|
-
<% end %>
|
|
9
|
-
|
|
10
1
|
<% content_for :scripts do %>
|
|
2
|
+
<%= javascript_include_tag *js_dependencies %>
|
|
11
3
|
|
|
12
|
-
<%= gmaps4rails_js_files(options[:map_options], options[:scripts], enable_js, options[:markers].try(:[], :options)) %>
|
|
13
4
|
<script type="text/javascript" charset="utf-8">
|
|
14
5
|
<%=raw options.to_gmaps4rails %>
|
|
15
6
|
</script>
|
|
16
|
-
|
|
17
7
|
<% end %>
|
|
18
8
|
|
|
19
|
-
|
|
9
|
+
<% case dom.map_provider %>
|
|
10
|
+
<% when "mapquest" %>
|
|
11
|
+
<div id="<%= dom.map_id %>" style="width:750px; height:475px;">
|
|
12
|
+
<!-- TODO: change this style dynamically -->
|
|
13
|
+
</div>
|
|
14
|
+
<% when "bing" %>
|
|
15
|
+
<div id="<%= dom.map_id %>" class="<%= dom.map_class %>"></div>
|
|
16
|
+
<% else %>
|
|
17
|
+
<div class="<%= dom.container_class %>">
|
|
18
|
+
<div id="<%= dom.map_id %>" class="<%= dom.map_class %>"></div>
|
|
19
|
+
</div>
|
|
20
|
+
<% end %>
|
data/gmaps4rails.gemspec
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
2
|
+
|
|
3
|
+
# Maintain your gem's version:
|
|
4
|
+
require "gmaps4rails/version"
|
|
5
|
+
|
|
6
|
+
# Describe your gem and declare its dependencies:
|
|
7
|
+
Gem::Specification.new do |s|
|
|
8
|
+
s.name = "gmaps4rails"
|
|
9
|
+
s.version = Gmaps4rails::VERSION
|
|
10
|
+
s.authors = [%q{Benjamin Roth}, %q{David Ruyer}]
|
|
11
|
+
s.email = [%q{apnea.diving.deep@gmail.com}, %q{david.ruyer@gmail.com}]
|
|
12
|
+
s.homepage = %q{http://github.com/apneadiving/Google-Maps-for-Rails}
|
|
13
|
+
s.summary = %q{Maps made easy for Rails 3}
|
|
14
|
+
s.description = %q{Enables easy display of items (taken from a Rails 3 model) on a Google Maps (JS API V3), OpenLayers, Mapquest and Bing. Geocoding + Directions included.}
|
|
15
|
+
s.files = `git ls-files`.split("\n")
|
|
16
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
|
17
|
+
|
|
18
|
+
s.add_development_dependency "rails", "~> 3.2.1"
|
|
19
|
+
s.add_development_dependency "sqlite3"
|
|
20
|
+
s.add_development_dependency "jquery-rails"
|
|
21
|
+
|
|
22
|
+
s.add_development_dependency "rspec-rails"
|
|
23
|
+
s.add_development_dependency 'database_cleaner'
|
|
24
|
+
#s.add_development_dependency "capybara"
|
|
25
|
+
#s.add_development_dependency 'launchy'
|
|
26
|
+
|
|
27
|
+
s.add_development_dependency "jasmine"
|
|
28
|
+
|
|
29
|
+
s.add_development_dependency "guard", "~> 1.0.1"
|
|
30
|
+
s.add_development_dependency "guard-spork"
|
|
31
|
+
s.add_development_dependency 'guard-coffeescript'
|
|
32
|
+
s.add_development_dependency 'guard-jasmine'
|
|
33
|
+
s.add_development_dependency "guard-rspec"
|
|
34
|
+
|
|
35
|
+
s.add_development_dependency "factory_girl_rails"
|
|
36
|
+
|
|
37
|
+
s.add_development_dependency 'pry'
|
|
38
|
+
end
|
data/lib/gmaps4rails.rb
CHANGED
|
@@ -8,14 +8,6 @@ module Gmaps4rails
|
|
|
8
8
|
ActionView::Base.send :include, Gmaps4railsHelper
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
initializer "add asset directories to pipeline" do |app|
|
|
12
|
-
if Rails::VERSION::MAJOR >= 3 && Rails::VERSION::MINOR >= 1
|
|
13
|
-
app.config.assets.paths << "#{root}/public/stylesheets"
|
|
14
|
-
else
|
|
15
|
-
app.middleware.use ::ActionDispatch::Static, "#{root}/public"
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
11
|
end
|
|
20
12
|
|
|
21
13
|
class Railtie < Rails::Railtie
|
|
@@ -8,34 +8,55 @@ module Gmaps4rails
|
|
|
8
8
|
|
|
9
9
|
module InstanceMethods
|
|
10
10
|
|
|
11
|
-
# This is a
|
|
12
|
-
|
|
11
|
+
# This is a validation method which triggers the geocoding and save its results
|
|
13
12
|
def process_geocoding
|
|
14
13
|
#to prevent geocoding each time a save is made
|
|
15
|
-
return true if
|
|
16
|
-
#try to geocode
|
|
14
|
+
return true if gmaps4rails_prevent_geocoding?
|
|
17
15
|
begin
|
|
18
16
|
coordinates = Gmaps4rails.geocode(self.send(gmaps4rails_options[:address]), gmaps4rails_options[:language], false, gmaps4rails_options[:protocol])
|
|
19
17
|
rescue GeocodeStatus, GeocodeInvalidQuery => e #address was invalid, add error to address.
|
|
20
18
|
Rails.logger.warn(e)
|
|
21
19
|
errors[gmaps4rails_options[:address]] << gmaps4rails_options[:msg] if Gmaps4rails.condition_eval(self, gmaps4rails_options[:validation])
|
|
22
|
-
rescue GeocodeNetStatus => e
|
|
20
|
+
rescue GeocodeNetStatus => e #connection error, No need to prevent save.
|
|
23
21
|
Rails.logger.warn(e)
|
|
24
|
-
#TODO add customization here?
|
|
25
22
|
else #if no exception, save the values
|
|
26
|
-
self.
|
|
27
|
-
self.send("#{gmaps4rails_options[:lat_column]}=", coordinates.first[:lat]) if self.respond_to?("#{gmaps4rails_options[:lat_column]}=")
|
|
28
|
-
unless gmaps4rails_options[:normalized_address].nil?
|
|
29
|
-
self.send("#{gmaps4rails_options[:normalized_address]}=", coordinates.first[:matched_address])
|
|
30
|
-
end
|
|
31
|
-
# Call the callback method to let the user do what he wants with the data
|
|
32
|
-
self.send(gmaps4rails_options[:callback], coordinates.first[:full_data]) unless gmaps4rails_options[:callback].nil?
|
|
33
|
-
if Gmaps4rails.condition_eval(self, gmaps4rails_options[:check_process])
|
|
34
|
-
self.send("#{gmaps4rails_options[:checker]}=", true)
|
|
35
|
-
end
|
|
23
|
+
self.gmaps4rails_save_data(coordinates)
|
|
36
24
|
end
|
|
37
25
|
end
|
|
38
|
-
|
|
26
|
+
|
|
27
|
+
# saves coordinates according to the various options
|
|
28
|
+
def gmaps4rails_save_data(coordinates)
|
|
29
|
+
self.send("#{gmaps4rails_options[:lng_column]}=", coordinates.first[:lng])
|
|
30
|
+
self.send("#{gmaps4rails_options[:lat_column]}=", coordinates.first[:lat])
|
|
31
|
+
# save normalized address if required
|
|
32
|
+
self.send("#{gmaps4rails_options[:normalized_address]}=", coordinates.first[:matched_address]) unless gmaps4rails_options[:normalized_address].nil?
|
|
33
|
+
# Call the callback method to let the user do what he wants with the data
|
|
34
|
+
self.send(gmaps4rails_options[:callback], coordinates.first[:full_data]) unless gmaps4rails_options[:callback].nil?
|
|
35
|
+
# update checker if required
|
|
36
|
+
self.send("#{gmaps4rails_options[:checker]}=", true) if gmaps4rails_check_geocoding?
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# if process_geocoding is a TrueClass or a FalseClass, 'check_process' and 'checker' play an additional role
|
|
40
|
+
# if process_geocoding is a Proc or a Symbol, 'check_process' and 'checker' are skipped since process_geocoding bears the whole logic
|
|
41
|
+
def gmaps4rails_prevent_geocoding?
|
|
42
|
+
if gmaps4rails_options[:process_geocoding].is_a?(TrueClass) || gmaps4rails_options[:process_geocoding].is_a?(FalseClass)
|
|
43
|
+
return true if !Gmaps4rails.condition_eval(self, gmaps4rails_options[:process_geocoding])
|
|
44
|
+
Gmaps4rails.condition_eval(self, gmaps4rails_options[:check_process]) && self.send("#{gmaps4rails_options[:checker]}") == true
|
|
45
|
+
else
|
|
46
|
+
!Gmaps4rails.condition_eval(self, gmaps4rails_options[:process_geocoding])
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Do we have to check the geocoding
|
|
51
|
+
def gmaps4rails_check_geocoding?
|
|
52
|
+
if gmaps4rails_options[:process_geocoding].is_a?(TrueClass) || gmaps4rails_options[:process_geocoding].is_a?(FalseClass)
|
|
53
|
+
Gmaps4rails.condition_eval(self, gmaps4rails_options[:check_process])
|
|
54
|
+
else
|
|
55
|
+
false
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# creates json for one instance
|
|
39
60
|
def to_gmaps4rails(&block)
|
|
40
61
|
json = "["
|
|
41
62
|
object_json = Gmaps4rails.create_json(self, &block)
|
|
@@ -49,26 +70,27 @@ module Gmaps4rails
|
|
|
49
70
|
|
|
50
71
|
def acts_as_gmappable args = {}
|
|
51
72
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
unless args[:process_geocoding] == false
|
|
55
|
-
validate :process_geocoding
|
|
56
|
-
end
|
|
73
|
+
validate :process_geocoding
|
|
57
74
|
|
|
58
75
|
#instance method containing all the options to configure the behaviour of the gem regarding the current Model
|
|
59
76
|
define_method "gmaps4rails_options" do
|
|
60
77
|
{
|
|
61
|
-
:
|
|
62
|
-
:
|
|
63
|
-
:
|
|
64
|
-
|
|
65
|
-
:
|
|
66
|
-
:
|
|
67
|
-
|
|
68
|
-
:
|
|
69
|
-
:
|
|
70
|
-
|
|
71
|
-
:
|
|
78
|
+
:process_geocoding => args[:process_geocoding].nil? ? true : args[:process_geocoding],
|
|
79
|
+
:check_process => args[:check_process].nil? ? true : args[:check_process],
|
|
80
|
+
:checker => args[:checker] || "gmaps",
|
|
81
|
+
|
|
82
|
+
:lat_column => args[:lat] || "latitude",
|
|
83
|
+
:lng_column => args[:lng] || "longitude",
|
|
84
|
+
|
|
85
|
+
:msg => args[:msg] || "Address invalid",
|
|
86
|
+
:validation => args[:validation].nil? ? true : args[:validation],
|
|
87
|
+
|
|
88
|
+
:language => args[:language] || "en",
|
|
89
|
+
:protocol => args[:protocol] || "http",
|
|
90
|
+
|
|
91
|
+
:address => args[:address] || "gmaps4rails_address",
|
|
92
|
+
:callback => args[:callback],
|
|
93
|
+
:normalized_address => args[:normalized_address]
|
|
72
94
|
}
|
|
73
95
|
end
|
|
74
96
|
|
data/lib/gmaps4rails/base.rb
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
require 'gmaps4rails/acts_as_gmappable'
|
|
2
2
|
|
|
3
|
-
require 'gmaps4rails/
|
|
4
|
-
require 'gmaps4rails/
|
|
3
|
+
require 'gmaps4rails/js_builder'
|
|
4
|
+
require 'gmaps4rails/json_builder'
|
|
5
|
+
require 'gmaps4rails/view_helper'
|
|
5
6
|
require 'gmaps4rails/geocoding'
|
|
6
7
|
require 'gmaps4rails/google_places'
|
|
7
8
|
require 'gmaps4rails/extensions/array'
|
|
@@ -27,20 +28,14 @@ module Gmaps4rails
|
|
|
27
28
|
|
|
28
29
|
def Gmaps4rails.condition_eval(object, condition)
|
|
29
30
|
case condition
|
|
30
|
-
when Symbol
|
|
31
|
-
when Proc
|
|
32
|
-
when TrueClass
|
|
33
|
-
when FalseClass then condition
|
|
31
|
+
when Symbol, String then object.send condition
|
|
32
|
+
when Proc then condition.call(object)
|
|
33
|
+
when TrueClass, FalseClass then condition
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
private
|
|
38
|
-
|
|
39
|
-
# To create valid js, this method escapes everything but Numeric, true or false
|
|
40
|
-
def Gmaps4rails.filter(data)
|
|
41
|
-
data.to_json
|
|
42
|
-
end
|
|
43
|
-
|
|
38
|
+
|
|
44
39
|
# get the response from the url encoded address string
|
|
45
40
|
def Gmaps4rails.get_response(url)
|
|
46
41
|
url = URI.parse(url)
|
|
@@ -1,53 +1,27 @@
|
|
|
1
1
|
module Gmaps4railsHelper
|
|
2
2
|
|
|
3
|
-
# shortcut helper for
|
|
4
|
-
|
|
5
|
-
def gmaps4rails(builder
|
|
3
|
+
# shortcut helper for marker display with convenient default settings
|
|
4
|
+
# @params [String] builder is a json string
|
|
5
|
+
def gmaps4rails(builder)
|
|
6
6
|
options = {
|
|
7
7
|
:map_options => { :auto_adjust => true},
|
|
8
8
|
:markers => { :data => builder, :options => {:do_clustering => true} }
|
|
9
9
|
}
|
|
10
|
-
|
|
10
|
+
gmaps(options)
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
#
|
|
14
|
-
|
|
15
|
-
def gmaps(options
|
|
16
|
-
|
|
13
|
+
# full helper to pass all variables and their options
|
|
14
|
+
# @params [Hash] options is a Hash containing data and options. Example: { markers:{ data: @json, options: { do_clustering: true } } }
|
|
15
|
+
def gmaps(options)
|
|
16
|
+
options_with_indifferent_access = options.with_indifferent_access
|
|
17
|
+
view_helper = Gmaps4rails::ViewHelper.new(options_with_indifferent_access)
|
|
18
|
+
|
|
19
|
+
render :partial => '/gmaps4rails/gmaps4rails',
|
|
20
|
+
:locals => {
|
|
21
|
+
:options => options_with_indifferent_access,
|
|
22
|
+
:js_dependencies => view_helper.js_dependencies_array,
|
|
23
|
+
:dom => view_helper.dom_attributes
|
|
24
|
+
}
|
|
17
25
|
end
|
|
18
26
|
|
|
19
|
-
def gmaps4rails_js_libraries(libraries_array)
|
|
20
|
-
return "" if libraries_array.nil?
|
|
21
|
-
"," + libraries_array.join(",")
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def gmaps4rails_map_language(map_options)
|
|
25
|
-
"language=#{map_options.try(:[], :language) || ''}&hl=#{map_options.try(:[], :hl) || ''}®ion=#{map_options.try(:[], :region) || ''}".html_safe
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def gmaps4rails_map_id(map_options)
|
|
29
|
-
map_options.try(:[], :id) || Gmaps4rails::DEFAULT_MAP_ID
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def gmaps4rails_container_class(map_options)
|
|
33
|
-
map_options.try(:[], :container_class) || "map_container"
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def gmaps4rails_map_class(map_options)
|
|
37
|
-
default_class = map_options.try(:[], :provider) == "bing" ? "bing_map" : "gmaps4rails_map"
|
|
38
|
-
map_options.try(:[], :class) || default_class
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def gmaps4rails_js_files(map_options = nil, scripts = nil, enable_js = true, marker_options = nil)
|
|
43
|
-
render "/gmaps4rails/scripts", :map_options => map_options, :scripts => scripts, :enable_js => enable_js, :marker_options => marker_options
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def gmaps4rails_html(map_options = nil)
|
|
47
|
-
render "/gmaps4rails/html", :map_options => map_options
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def gmaps4rails_pipeline_enabled?
|
|
51
|
-
Rails.configuration.methods.include?(:assets) && Rails.configuration.assets.enabled
|
|
52
|
-
end
|
|
53
27
|
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
module Gmaps4rails
|
|
2
|
+
|
|
3
|
+
def Gmaps4rails.create_js_from_hash(hash)
|
|
4
|
+
::Gmaps4rails::JsBuilder.new.create_js_from_hash(hash)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
class JsBuilder
|
|
8
|
+
|
|
9
|
+
DEFAULT_MAP_ID = "map"
|
|
10
|
+
|
|
11
|
+
#the variable 'hash' must have the following structure
|
|
12
|
+
#{
|
|
13
|
+
# :map_options => hash,
|
|
14
|
+
# :markers => { :data => json, :options => hash },
|
|
15
|
+
# :polylines => { :data => json, :options => hash },
|
|
16
|
+
# :polygons => { :data => json, :options => hash },
|
|
17
|
+
# :circles => { :data => json, :options => hash },
|
|
18
|
+
# :direction => { :data => hash, :options => hash },
|
|
19
|
+
# :kml => { :data => json, :options => hash }
|
|
20
|
+
#}
|
|
21
|
+
#should be with only symbol keys or with indifferent access
|
|
22
|
+
def create_js_from_hash(hash)
|
|
23
|
+
result = Array.new
|
|
24
|
+
map_id = "Gmaps." + get_map_id(hash[:map_options])
|
|
25
|
+
|
|
26
|
+
#means we are creating a new map
|
|
27
|
+
result << "#{map_id} = new #{get_constructor hash[:map_options] }" + ";"
|
|
28
|
+
result << "Gmaps.#{js_function_name hash } = function() {"
|
|
29
|
+
result << create_map_js(hash[:map_options], map_id) unless hash[:map_options].nil?
|
|
30
|
+
result << "#{map_id}.initialize();"
|
|
31
|
+
|
|
32
|
+
hash.each do |category, content| #loop through options hash
|
|
33
|
+
skipped_categories = [:map_options, :last_map, :scripts]
|
|
34
|
+
unless skipped_categories.include? category.to_sym
|
|
35
|
+
if category.to_sym == :direction
|
|
36
|
+
result << create_direction_js(content, map_id)
|
|
37
|
+
else
|
|
38
|
+
result << create_general_js(content, map_id, category)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
result << "#{map_id}.adjustMapToBounds();"
|
|
43
|
+
result << "#{map_id}.callback();"
|
|
44
|
+
|
|
45
|
+
result << "};"
|
|
46
|
+
if hash[:last_map].nil? || hash[:last_map] == true
|
|
47
|
+
result << "Gmaps.oldOnload = window.onload;\n window.onload = function() { Gmaps.triggerOldOnload(); Gmaps.loadMaps(); };"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
result * ('
|
|
51
|
+
')
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def js_function_name(hash)
|
|
55
|
+
"load_" + get_map_id(hash[:map_options])
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def get_map_id(hash)
|
|
59
|
+
hash.nil? || hash[:id].nil? ? DEFAULT_MAP_ID : hash[:id]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def get_constructor(hash)
|
|
63
|
+
hash.nil? || hash[:provider].nil? ? "Gmaps4RailsGoogle()" : "Gmaps4Rails#{hash[:provider].capitalize}()"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def create_map_js(map_hash, map_id)
|
|
67
|
+
output = Array.new
|
|
68
|
+
skipped_keys = [:class, :container_class]
|
|
69
|
+
map_hash.each do |option_k, option_v|
|
|
70
|
+
unless skipped_keys.include? option_k.to_sym
|
|
71
|
+
case option_k.to_sym
|
|
72
|
+
when :bounds, :raw #particular case, render the content unescaped
|
|
73
|
+
output << "#{map_id}.map_options.#{option_k} = #{option_v};"
|
|
74
|
+
else
|
|
75
|
+
output << "#{map_id}.map_options.#{option_k} = #{option_v.to_json};"
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
output
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def create_general_js(hash, map_id, category)
|
|
83
|
+
output = Array.new
|
|
84
|
+
output << "#{map_id}.#{category} = #{hash[:data]};"
|
|
85
|
+
hash[:options] ||= Array.new
|
|
86
|
+
hash[:options].each do |option_k, option_v|
|
|
87
|
+
if option_k.to_sym == :raw
|
|
88
|
+
output << "#{map_id}.#{category}_conf.#{option_k} = #{option_v};"
|
|
89
|
+
else
|
|
90
|
+
output << "#{map_id}.#{category}_conf.#{option_k} = #{option_v.to_json};"
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
output << "#{map_id}.create_#{category}();"
|
|
94
|
+
output
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def create_direction_js(hash, map_id)
|
|
98
|
+
output = Array.new
|
|
99
|
+
output << "#{map_id}.direction_conf.origin = '#{hash["data"]["from"]}';"
|
|
100
|
+
output << "#{map_id}.direction_conf.destination = '#{hash["data"]["to"]}';"
|
|
101
|
+
hash[:options] ||= Array.new
|
|
102
|
+
hash[:options].each do |option_k, option_v|
|
|
103
|
+
if option_k.to_sym == :waypoints
|
|
104
|
+
waypoints = Array.new
|
|
105
|
+
option_v.each do |waypoint|
|
|
106
|
+
waypoints << { "location" => waypoint, "stopover" => true }.to_json
|
|
107
|
+
end
|
|
108
|
+
output << "#{map_id}.direction_conf.waypoints = [#{waypoints * (",")}];"
|
|
109
|
+
else #option_k != "waypoint"
|
|
110
|
+
output << "#{map_id}.direction_conf.#{option_k} = #{option_v.to_json};"
|
|
111
|
+
end
|
|
112
|
+
end #end .each
|
|
113
|
+
output << "#{map_id}.create_direction();"
|
|
114
|
+
output
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
end
|
|
121
|
+
|