gmaps4rails 2.0.0.pre → 2.0.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.
Files changed (184) hide show
  1. data/.travis.yml +2 -4
  2. data/Gemfile +5 -1
  3. data/Gemfile.lock +31 -113
  4. data/README.rdoc +53 -70
  5. data/Rakefile +21 -1
  6. data/gmaps4rails.gemspec +4 -19
  7. data/js_compilation/gmaps_google.js +961 -0
  8. data/lib/generators/gmaps4rails/copy_coffee_generator.rb +14 -0
  9. data/lib/generators/gmaps4rails/copy_js_generator.rb +15 -0
  10. data/lib/gmaps4rails.rb +12 -22
  11. data/lib/gmaps4rails/markers_builder.rb +74 -0
  12. data/lib/gmaps4rails/rails/engine.rb +6 -0
  13. data/lib/gmaps4rails/rails/railtie.rb +6 -0
  14. data/lib/gmaps4rails/version.rb +2 -2
  15. data/script/compile_coffee_files.rb +19 -0
  16. data/script/gmaps4rails.rake +7 -0
  17. data/spec/javascripts/google/builders/marker_spec.js +96 -0
  18. data/spec/javascripts/helpers/SpecHelper.js +101 -0
  19. data/spec/javascripts/helpers/matchers.js +12 -0
  20. data/spec/javascripts/helpers/underscore.js +6 -0
  21. data/spec/javascripts/objects/handler_spec.js +320 -0
  22. data/spec/javascripts/support/jasmine.yml +86 -0
  23. data/spec/javascripts/support/jasmine_helper.rb +11 -0
  24. data/spec/lib/base_spec.rb +10 -52
  25. data/spec/lib/markers_builder_spec.rb +49 -0
  26. data/spec/spec_helper.rb +1 -25
  27. data/vendor/assets/javascripts/gmaps/base.coffee +16 -0
  28. data/vendor/assets/javascripts/gmaps/base/base.coffee +17 -0
  29. data/vendor/assets/javascripts/gmaps/google.coffee +3 -0
  30. data/vendor/assets/javascripts/gmaps/google/builders/bound.coffee +6 -0
  31. data/vendor/assets/javascripts/gmaps/google/builders/circle.coffee +21 -0
  32. data/vendor/assets/javascripts/gmaps/google/builders/clusterer.coffee +6 -0
  33. data/vendor/assets/javascripts/gmaps/google/builders/kml.coffee +17 -0
  34. data/vendor/assets/javascripts/gmaps/google/builders/map.coffee +27 -0
  35. data/vendor/assets/javascripts/gmaps/google/builders/marker.coffee +100 -0
  36. data/vendor/assets/javascripts/gmaps/google/builders/polygon.coffee +24 -0
  37. data/vendor/assets/javascripts/gmaps/google/builders/polyline.coffee +24 -0
  38. data/vendor/assets/javascripts/gmaps/google/objects/bound.coffee +13 -0
  39. data/vendor/assets/javascripts/gmaps/google/objects/circle.coffee +9 -0
  40. data/vendor/assets/javascripts/gmaps/google/objects/clusterer.coffee +13 -0
  41. data/vendor/assets/javascripts/gmaps/google/objects/common.coffee +23 -0
  42. data/vendor/assets/javascripts/gmaps/google/objects/kml.coffee +15 -0
  43. data/vendor/assets/javascripts/gmaps/google/objects/map.coffee +19 -0
  44. data/vendor/assets/javascripts/gmaps/google/objects/marker.coffee +11 -0
  45. data/vendor/assets/javascripts/gmaps/google/objects/polygon.coffee +8 -0
  46. data/vendor/assets/javascripts/gmaps/google/objects/polyline.coffee +8 -0
  47. data/vendor/assets/javascripts/gmaps/google/primitives.coffee +43 -0
  48. data/vendor/assets/javascripts/gmaps/objects/base_builder.coffee +20 -0
  49. data/vendor/assets/javascripts/gmaps/objects/builder.coffee +12 -0
  50. data/vendor/assets/javascripts/gmaps/objects/handler.coffee +153 -0
  51. data/vendor/assets/javascripts/gmaps/objects/null_clusterer.coffee +4 -0
  52. metadata +66 -299
  53. data/Guardfile.old +0 -24
  54. data/app/views/gmaps4rails/_gmaps4rails.html.erb +0 -20
  55. data/lib/generators/gmaps4rails/install_generator.rb +0 -43
  56. data/lib/generators/templates/README +0 -2
  57. data/lib/gmaps4rails/acts_as_gmappable.rb +0 -54
  58. data/lib/gmaps4rails/api_wrappers/base_net_methods.rb +0 -40
  59. data/lib/gmaps4rails/api_wrappers/direction.rb +0 -87
  60. data/lib/gmaps4rails/api_wrappers/geocoder.rb +0 -54
  61. data/lib/gmaps4rails/api_wrappers/places.rb +0 -74
  62. data/lib/gmaps4rails/base.rb +0 -126
  63. data/lib/gmaps4rails/extensions/enumerable.rb +0 -14
  64. data/lib/gmaps4rails/extensions/hash.rb +0 -9
  65. data/lib/gmaps4rails/helper/gmaps4rails_helper.rb +0 -33
  66. data/lib/gmaps4rails/js_builder.rb +0 -154
  67. data/lib/gmaps4rails/json_builder.rb +0 -140
  68. data/lib/gmaps4rails/model_handler.rb +0 -101
  69. data/lib/gmaps4rails/view_helper.rb +0 -172
  70. data/lib/tasks/jasmine.rake +0 -8
  71. data/public/javascripts/gmaps4rails/all.js +0 -2144
  72. data/public/javascripts/gmaps4rails/base.js +0 -792
  73. data/public/javascripts/gmaps4rails/google.js +0 -556
  74. data/public/javascripts/gmaps4rails/openlayers.js +0 -377
  75. data/public/stylesheets/gmaps4rails.css +0 -24
  76. data/spec/dummy/.gitignore +0 -3
  77. data/spec/dummy/.rspec +0 -1
  78. data/spec/dummy/README.rdoc +0 -261
  79. data/spec/dummy/Rakefile +0 -7
  80. data/spec/dummy/app/assets/javascripts/application.js +0 -18
  81. data/spec/dummy/app/assets/stylesheets/application.css +0 -15
  82. data/spec/dummy/app/assets/stylesheets/gmaps4rails.css +0 -24
  83. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  84. data/spec/dummy/app/controllers/users_controller.rb +0 -105
  85. data/spec/dummy/app/helpers/application_helper.rb +0 -2
  86. data/spec/dummy/app/mailers/.gitkeep +0 -0
  87. data/spec/dummy/app/models/.gitkeep +0 -0
  88. data/spec/dummy/app/models/place.rb +0 -16
  89. data/spec/dummy/app/models/user.rb +0 -12
  90. data/spec/dummy/app/views/layouts/application.html.erb +0 -17
  91. data/spec/dummy/app/views/users/_form.html.erb +0 -37
  92. data/spec/dummy/app/views/users/edit.html.erb +0 -6
  93. data/spec/dummy/app/views/users/index.html.erb +0 -268
  94. data/spec/dummy/app/views/users/new.html.erb +0 -5
  95. data/spec/dummy/app/views/users/show.html.erb +0 -30
  96. data/spec/dummy/config.ru +0 -4
  97. data/spec/dummy/config/application.rb +0 -62
  98. data/spec/dummy/config/boot.rb +0 -10
  99. data/spec/dummy/config/database.yml +0 -25
  100. data/spec/dummy/config/environment.rb +0 -5
  101. data/spec/dummy/config/environments/development.rb +0 -37
  102. data/spec/dummy/config/environments/production.rb +0 -67
  103. data/spec/dummy/config/environments/test.rb +0 -37
  104. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  105. data/spec/dummy/config/initializers/gmaps4rails.rb +0 -1
  106. data/spec/dummy/config/initializers/inflections.rb +0 -15
  107. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  108. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  109. data/spec/dummy/config/initializers/session_store.rb +0 -8
  110. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  111. data/spec/dummy/config/locales/en.yml +0 -5
  112. data/spec/dummy/config/routes.rb +0 -60
  113. data/spec/dummy/db/migrate/20120408170155_create_users.rb +0 -16
  114. data/spec/dummy/db/schema.rb +0 -29
  115. data/spec/dummy/lib/assets/.gitkeep +0 -0
  116. data/spec/dummy/log/.gitkeep +0 -0
  117. data/spec/dummy/public/404.html +0 -26
  118. data/spec/dummy/public/422.html +0 -26
  119. data/spec/dummy/public/500.html +0 -25
  120. data/spec/dummy/public/favicon.ico +0 -0
  121. data/spec/dummy/public/javascripts/Player.js +0 -22
  122. data/spec/dummy/public/javascripts/Song.js +0 -7
  123. data/spec/dummy/public/logo.png +0 -0
  124. data/spec/dummy/script/rails +0 -6
  125. data/spec/factories/place_factory.rb +0 -16
  126. data/spec/factories/user_factory.rb +0 -23
  127. data/spec/fixtures/google_direction_valid.json +0 -65
  128. data/spec/fixtures/google_geocoding_toulon_france.json +0 -58
  129. data/spec/fixtures/google_places_valid.json +0 -45
  130. data/spec/fixtures/google_wrong_geocoding.json +0 -4
  131. data/spec/launchers/all_but_requests.rb +0 -0
  132. data/spec/launchers/all_specs.rb +0 -0
  133. data/spec/launchers/requests.rb +0 -0
  134. data/spec/lib/direction_spec.rb +0 -53
  135. data/spec/lib/geocoder_spec.rb +0 -46
  136. data/spec/lib/js_builder_spec.rb +0 -134
  137. data/spec/lib/json_builder_spec.rb +0 -232
  138. data/spec/lib/places_spec.rb +0 -25
  139. data/spec/models/place_spec.rb +0 -39
  140. data/spec/models/user_spec.rb +0 -187
  141. data/spec/support/geocoding.rb +0 -40
  142. data/spec/support/matchers.rb +0 -73
  143. data/todo +0 -0
  144. data/vendor/assets/javascripts/gmaps4rails/all.js +0 -1
  145. data/vendor/assets/javascripts/gmaps4rails/base.coffee +0 -1
  146. data/vendor/assets/javascripts/gmaps4rails/base/common.coffee +0 -43
  147. data/vendor/assets/javascripts/gmaps4rails/base/configuration.coffee +0 -7
  148. data/vendor/assets/javascripts/gmaps4rails/base/gmaps.coffee +0 -13
  149. data/vendor/assets/javascripts/gmaps4rails/base/interfaces/basic_interface.coffee +0 -15
  150. data/vendor/assets/javascripts/gmaps4rails/base/interfaces/controller_interface.coffee +0 -15
  151. data/vendor/assets/javascripts/gmaps4rails/base/interfaces/map_interface.coffee +0 -27
  152. data/vendor/assets/javascripts/gmaps4rails/base/interfaces/marker_interface.coffee +0 -15
  153. data/vendor/assets/javascripts/gmaps4rails/base/main.coffee +0 -124
  154. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/circle_controller.coffee +0 -29
  155. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/kml_controller.coffee +0 -5
  156. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/marker_controller.coffee +0 -76
  157. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/polygon_controller.coffee +0 -29
  158. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/polyline_controller.coffee +0 -29
  159. data/vendor/assets/javascripts/gmaps4rails/base/objects/circle.coffee +0 -12
  160. data/vendor/assets/javascripts/gmaps4rails/base/objects/kml.coffee +0 -8
  161. data/vendor/assets/javascripts/gmaps4rails/base/objects/map.coffee +0 -62
  162. data/vendor/assets/javascripts/gmaps4rails/base/objects/marker.coffee +0 -24
  163. data/vendor/assets/javascripts/gmaps4rails/base/objects/polygon.coffee +0 -11
  164. data/vendor/assets/javascripts/gmaps4rails/base/objects/polyline.coffee +0 -11
  165. data/vendor/assets/javascripts/gmaps4rails/bing.coffee +0 -1
  166. data/vendor/assets/javascripts/gmaps4rails/bing/main.coffee +0 -29
  167. data/vendor/assets/javascripts/gmaps4rails/bing/objects/map.coffee +0 -63
  168. data/vendor/assets/javascripts/gmaps4rails/bing/objects/marker.coffee +0 -78
  169. data/vendor/assets/javascripts/gmaps4rails/bing/shared.coffee +0 -20
  170. data/vendor/assets/javascripts/gmaps4rails/google.coffee +0 -1
  171. data/vendor/assets/javascripts/gmaps4rails/google/main.coffee +0 -47
  172. data/vendor/assets/javascripts/gmaps4rails/google/objects/circle.coffee +0 -38
  173. data/vendor/assets/javascripts/gmaps4rails/google/objects/kml.coffee +0 -16
  174. data/vendor/assets/javascripts/gmaps4rails/google/objects/map.coffee +0 -71
  175. data/vendor/assets/javascripts/gmaps4rails/google/objects/marker.coffee +0 -114
  176. data/vendor/assets/javascripts/gmaps4rails/google/objects/polygon.coffee +0 -38
  177. data/vendor/assets/javascripts/gmaps4rails/google/objects/polyline.coffee +0 -49
  178. data/vendor/assets/javascripts/gmaps4rails/google/shared.coffee +0 -27
  179. data/vendor/assets/javascripts/gmaps4rails/openlayers.coffee +0 -1
  180. data/vendor/assets/javascripts/gmaps4rails/openlayers/main.coffee +0 -138
  181. data/vendor/assets/javascripts/gmaps4rails/openlayers/objects/map.coffee +0 -49
  182. data/vendor/assets/javascripts/gmaps4rails/openlayers/objects/marker.coffee +0 -68
  183. data/vendor/assets/javascripts/gmaps4rails/openlayers/objects/polyline.coffee +0 -39
  184. data/vendor/assets/javascripts/gmaps4rails/openlayers/shared.coffee +0 -19
data/.travis.yml CHANGED
@@ -3,7 +3,5 @@ rvm:
3
3
  - 1.8.7
4
4
  - 1.9.2
5
5
  - 1.9.3
6
-
7
- before_script: 'cd spec/dummy/; rake db:migrate RAILS_ENV=test; cd ../..'
8
- script: 'rspec spec'
9
- # after_script: 'bundle exec guard-jasmine -u http://localhost:8888/'
6
+ - 2.0
7
+ script: 'bundle exec rspec spec && bundle exec rake jasmine_travis'
data/Gemfile CHANGED
@@ -4,4 +4,8 @@ source "http://rubygems.org"
4
4
  # Bundler will treat runtime dependencies like base dependencies, and
5
5
  # development dependencies will be added by default to the :development group.
6
6
 
7
- gemspec
7
+ gemspec
8
+
9
+ group :development, :test do
10
+ gem 'jasmine', :platforms => [:ruby_19, :ruby_20]
11
+ end
data/Gemfile.lock CHANGED
@@ -1,149 +1,67 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gmaps4rails (2.0.0.pre)
4
+ gmaps4rails (2.0.0.pre2)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
8
8
  specs:
9
- actionmailer (3.2.3)
10
- actionpack (= 3.2.3)
11
- mail (~> 2.4.4)
12
- actionpack (3.2.3)
13
- activemodel (= 3.2.3)
14
- activesupport (= 3.2.3)
15
- builder (~> 3.0.0)
16
- erubis (~> 2.7.0)
17
- journey (~> 1.0.1)
18
- rack (~> 1.4.0)
19
- rack-cache (~> 1.2)
20
- rack-test (~> 0.6.1)
21
- sprockets (~> 2.1.2)
22
- activemodel (3.2.3)
23
- activesupport (= 3.2.3)
24
- builder (~> 3.0.0)
25
- activerecord (3.2.3)
26
- activemodel (= 3.2.3)
27
- activesupport (= 3.2.3)
28
- arel (~> 3.0.2)
29
- tzinfo (~> 0.3.29)
30
- activeresource (3.2.3)
31
- activemodel (= 3.2.3)
32
- activesupport (= 3.2.3)
33
- activesupport (3.2.3)
34
- i18n (~> 0.6)
35
- multi_json (~> 1.0)
36
- addressable (2.2.8)
37
- arel (3.0.2)
38
- builder (3.0.0)
9
+ childprocess (0.3.9)
10
+ ffi (~> 1.0, >= 1.0.11)
39
11
  coderay (1.0.6)
40
12
  coffee-script (2.2.0)
41
13
  coffee-script-source
42
14
  execjs
43
15
  coffee-script-source (1.3.3)
44
- crack (0.3.1)
45
- database_cleaner (0.7.2)
46
- diff-lcs (1.1.3)
47
- erubis (2.7.0)
16
+ diff-lcs (1.2.4)
48
17
  execjs (1.4.0)
49
18
  multi_json (~> 1.0)
50
- factory_girl (2.6.1)
51
- activesupport (>= 2.3.9)
52
- factory_girl_rails (1.7.0)
53
- factory_girl (~> 2.6.0)
54
- railties (>= 3.0.0)
19
+ ffi (1.9.0)
55
20
  hike (1.2.1)
56
- i18n (0.6.0)
57
- journey (1.0.3)
58
- jquery-rails (2.0.2)
59
- railties (>= 3.2.0, < 5.0)
60
- thor (~> 0.14)
61
- json (1.6.6)
62
- mail (2.4.4)
63
- i18n (>= 0.4.0)
64
- mime-types (~> 1.16)
65
- treetop (~> 1.4.8)
21
+ jasmine (1.3.2)
22
+ jasmine-core (~> 1.3.1)
23
+ rack (~> 1.0)
24
+ rspec (>= 1.3.1)
25
+ selenium-webdriver (>= 0.1.3)
26
+ jasmine-core (1.3.1)
66
27
  method_source (0.7.1)
67
- mime-types (1.18)
68
- mongoid (3.0.6)
69
- activemodel (~> 3.1)
70
- moped (~> 1.1)
71
- origin (~> 1.0)
72
- tzinfo (~> 0.3.22)
73
- moped (1.2.5)
74
28
  multi_json (1.2.0)
75
- origin (1.0.9)
76
- polyglot (0.3.3)
77
29
  pry (0.9.8.4)
78
30
  coderay (~> 1.0.5)
79
31
  method_source (~> 0.7.1)
80
32
  slop (>= 2.4.4, < 3)
81
33
  rack (1.4.1)
82
- rack-cache (1.2)
83
- rack (>= 0.4)
84
- rack-ssl (1.3.2)
85
- rack
86
- rack-test (0.6.1)
87
- rack (>= 1.0)
88
- rails (3.2.3)
89
- actionmailer (= 3.2.3)
90
- actionpack (= 3.2.3)
91
- activerecord (= 3.2.3)
92
- activeresource (= 3.2.3)
93
- activesupport (= 3.2.3)
94
- bundler (~> 1.0)
95
- railties (= 3.2.3)
96
- railties (3.2.3)
97
- actionpack (= 3.2.3)
98
- activesupport (= 3.2.3)
99
- rack-ssl (~> 1.3.2)
100
- rake (>= 0.8.7)
101
- rdoc (~> 3.4)
102
- thor (~> 0.14.6)
103
- rake (0.9.2.2)
104
- rdoc (3.12)
105
- json (~> 1.4)
106
- rspec (2.8.0)
107
- rspec-core (~> 2.8.0)
108
- rspec-expectations (~> 2.8.0)
109
- rspec-mocks (~> 2.8.0)
110
- rspec-core (2.8.0)
111
- rspec-expectations (2.8.0)
112
- diff-lcs (~> 1.1.2)
113
- rspec-mocks (2.8.0)
114
- rspec-rails (2.8.1)
115
- actionpack (>= 3.0)
116
- activesupport (>= 3.0)
117
- railties (>= 3.0)
118
- rspec (~> 2.8.0)
34
+ rake (10.1.0)
35
+ rspec (2.14.0)
36
+ rspec-core (~> 2.14.0)
37
+ rspec-expectations (~> 2.14.0)
38
+ rspec-mocks (~> 2.14.0)
39
+ rspec-core (2.14.6)
40
+ rspec-expectations (2.14.3)
41
+ diff-lcs (>= 1.1.3, < 2.0)
42
+ rspec-mocks (2.14.4)
43
+ rubyzip (1.0.0)
44
+ selenium-webdriver (2.37.0)
45
+ childprocess (>= 0.2.5)
46
+ multi_json (~> 1.0)
47
+ rubyzip (~> 1.0.0)
48
+ websocket (~> 1.0.4)
119
49
  slop (2.4.4)
120
50
  sprockets (2.1.2)
121
51
  hike (~> 1.2)
122
52
  rack (~> 1.0)
123
53
  tilt (~> 1.1, != 1.3.0)
124
- sqlite3 (1.3.5)
125
- thor (0.14.6)
126
54
  tilt (1.3.3)
127
- treetop (1.4.10)
128
- polyglot
129
- polyglot (>= 0.3.1)
130
- tzinfo (0.3.32)
131
- webmock (1.8.7)
132
- addressable (>= 2.2.7)
133
- crack (>= 0.1.7)
55
+ websocket (1.0.7)
134
56
 
135
57
  PLATFORMS
136
58
  ruby
137
59
 
138
60
  DEPENDENCIES
139
61
  coffee-script
140
- database_cleaner
141
- factory_girl_rails
142
62
  gmaps4rails!
143
- jquery-rails
144
- mongoid (~> 3)
63
+ jasmine
145
64
  pry
146
- rails (~> 3.2.1)
147
- rspec-rails
148
- sqlite3
149
- webmock
65
+ rake (= 10.1.0)
66
+ rspec (= 2.14.0)
67
+ sprockets
data/README.rdoc CHANGED
@@ -1,20 +1,8 @@
1
- == Google Maps for Rails (gmaps4rails) {<img src="https://secure.travis-ci.org/apneadiving/Google-Maps-for-Rails.png?branch=master" alt="Build Status" />}[http://travis-ci.org/apneadiving/Google-Maps-for-Rails] {<img src="https://codeclimate.com/badge.png" />}[https://codeclimate.com/github/apneadiving/Google-Maps-for-Rails]
1
+ == Google Maps for Rails (gmaps4rails) {<img src="https://secure.travis-ci.org/apneadiving/Google-Maps-for-Rails.png?branch=master" alt="Build Status" />}[http://travis-ci.org/apneadiving/Google-Maps-for-Rails] {<img src="https://codeclimate.com/badge.png" />}[https://codeclimate.com/github/apneadiving/Google-Maps-for-Rails] {<img src="http://api.coderwall.com/apneadiving/endorsecount.png" alt="Endorse" />}[http://coderwall.com/apneadiving]
2
2
 
3
- Gmaps4rails is developed to simply create a Google Map:
3
+ Gmaps4rails is developed to simply create a Google Map with overlays (markers, infowindows...).
4
4
 
5
- - directly from your model,
6
-
7
- - from your own json
8
-
9
- It's based on Ruby on Rails 3 Engines and uses Google Maps API V3.
10
-
11
- == When Gmaps4rails finally means Global Maps for Rails
12
-
13
- I've added support for other map providers: openlayers, mapquest & bing.
14
-
15
- See: https://github.com/apneadiving/Google-Maps-for-Rails/wiki/Map-Apis
16
-
17
- Any help would be appreciated to complete this work.
5
+ Use it with any Ruby app (I guess you could simply take the js anywhere if you like).
18
6
 
19
7
  == Requirements
20
8
 
@@ -22,67 +10,76 @@ Any help would be appreciated to complete this work.
22
10
 
23
11
  gem 'gmaps4rails'
24
12
 
25
- 2) Copy the assets to your app (and be sure to copy the fresh assets when you upgrade the gem):
26
-
27
- rails generate gmaps4rails:install
13
+ 2) HTML
28
14
 
29
- This will copy all the coffeescript files if you're running Rails >= 3.1 or all the js files for Rails 3.0.x.
15
+ Add a div to bear your map, example:
30
16
 
31
- Only `base` + `your_provider` are necessary.
17
+ <div style='width: 800px;'>
18
+ <div id="map" style='width: 800px; height: 400px;'></div>
19
+ </div>
32
20
 
33
- 3) Javascript
34
-
35
- <%= yield :scripts %> (in your footer)
21
+ 2) Javascript Dependencies:
36
22
 
37
- This container will include the js files from map providers, the custom js to display the map, the gem's js code.
23
+ Insert google scripts in your dom:
38
24
 
39
- 4) CSS
25
+ <script src="//maps.google.com/maps/api/js?v=3.13&amp;sensor=false&amp;libraries=geometry" type="text/javascript"></script>
26
+ <script src='//google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.14/src/markerclusterer_packed.js' type='text/javascript'></script>
40
27
 
41
- `gmaps4rails.css` will be copied to your app after you run the Rails generator.
42
- Be sure to require this file in your view for your first steps.
28
+ You'll require underscore.js too, see here: {http://underscorejs.org/}[http://underscorejs.org/]
43
29
 
44
- For Rails 3.0.x or without assets pipeline:
30
+ 3) Javascript source code
45
31
 
46
- <%= stylesheet_link_tag 'gmaps4rails' %>
47
-
48
- For Rails >= 3.1 with assets pipeline, same principle: add the required file to your manifest.
32
+ If you have the asset pipeline, add this:
49
33
 
34
+ //= require underscore
35
+ //= require gmaps/google
50
36
 
51
- == Basic configuration
52
- In your model, add:
37
+ If you don't have aset pipeline, you'll need to import the js/coffee files:
53
38
 
54
- acts_as_gmappable
39
+ rails g gmaps4rails:copy_js
55
40
 
56
- def gmaps4rails_address
57
- #describe how to retrieve the address from your model, if you use directly a db column, you can dry your code, see wiki
58
- "#{self.street}, #{self.city}, #{self.country}"
59
- end
41
+ rails g gmaps4rails:copy_coffee
60
42
 
61
- Create a migration and add the following fields to your table (here users):
43
+ 4) Javascript code:
62
44
 
63
- add_column :users, :latitude, :float #you can change the name, see wiki
64
- add_column :users, :longitude, :float #you can change the name, see wiki
65
- add_column :users, :gmaps, :boolean #not mandatory, see wiki
45
+ Create your map:
66
46
 
67
- == Basic configuration: Non-relational DB
47
+ handler = Gmaps.build('Google');
48
+ handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
49
+ markers = handler.addMarkers([
50
+ {
51
+ "lat": 0,
52
+ "lng": 0,
53
+ "picture": {
54
+ "url": "https://addons.cdn.mozilla.net/img/uploads/addon_icons/13/13028-64.png",
55
+ "width": 36,
56
+ "height": 36
57
+ },
58
+ "infowindow": "hello!"
59
+ }
60
+ ]);
61
+ handler.bounds.extendWith(markers);
62
+ handler.fitMapToBounds();
63
+ });
68
64
 
69
- Mongoid example:
70
65
 
71
- acts_as_gmappable :position => :location
66
+ == Generating JSON
72
67
 
73
- field :location, :type => Array
74
-
75
- == How to?
76
- === QuickStart!
77
68
  In your controller:
78
-
79
- @json = User.all.to_gmaps4rails
69
+
70
+ @users = User.all
71
+ @hash = Gmaps4rails.build_markers(@users) do |user, marker|
72
+ marker.lat user.latitude
73
+ marker.lng user.longitude
74
+ end
80
75
 
81
76
  In your view:
82
77
 
83
- <%= gmaps4rails(@json) %>
78
+ markers = handler.addMarkers(<%=raw @hash.to_json %>);
79
+
80
+ == Easily customizable
84
81
 
85
- Done!
82
+ You can change almost everything with a few lines of code. {See details here}[https://github.com/apneadiving/Google-Maps-for-Rails/wiki/Change-handler-behavior]
86
83
 
87
84
  == Options
88
85
 
@@ -90,7 +87,7 @@ Done!
90
87
 
91
88
  * Circles, Polylines, Polygons
92
89
 
93
- * Geocode directly your address and retrieve coordinates.
90
+ * Geocode directly your address and retrieve coordinates.
94
91
 
95
92
  * Auto-adjust the map to your markers
96
93
 
@@ -106,24 +103,10 @@ Done!
106
103
 
107
104
  Feel free to contact us, you have your say.
108
105
 
109
- == Want to help?
110
-
111
- This is how you can launch the spec suite (js + ruby):
112
-
113
- * Clone the gem repository
114
-
115
- * Go to the gem's folder
116
-
117
- * run `bundle`
118
-
119
- * run `cd spec/dummy; rake db:migrate RAILS_ENV=test; cd ../..`
120
-
121
- * run `bundle exec rspec spec`
122
-
123
106
 
124
107
  == Copyright
125
- MIT license.
108
+ MIT license.
126
109
 
127
110
  Authors: Benjamin Roth, David Ruyer
128
111
 
129
- {Contributors}[https://github.com/apneadiving/Google-Maps-for-Rails/graphs/contributors]
112
+ {Contributors}[https://github.com/apneadiving/Google-Maps-for-Rails/graphs/contributors]
data/Rakefile CHANGED
@@ -1,4 +1,24 @@
1
1
  require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
3
 
4
- # import 'lib/tasks/jasmine.rake'
4
+
5
+ begin
6
+ require 'jasmine'
7
+ load 'jasmine/tasks/jasmine.rake'
8
+ rescue LoadError
9
+ task :jasmine do
10
+ abort "Jasmine is not available. In order to run jasmine, you must: (sudo) gem install jasmine"
11
+ end
12
+ end
13
+
14
+ desc "launch jasmine specs"
15
+ task :jasmine_travis do
16
+ puts "Starting to run 'rake jasmine:ci'..."
17
+ if defined? Jasmine
18
+ system("export DISPLAY=:99.0 && bundle exec rake jasmine:ci")
19
+ raise "'rake jasmine:ci' failed!" unless $?.exitstatus == 0
20
+ else
21
+ puts "Jasmine was not found"
22
+ end
23
+ end
24
+
data/gmaps4rails.gemspec CHANGED
@@ -11,28 +11,13 @@ Gem::Specification.new do |s|
11
11
  s.email = [%q{apnea.diving.deep@gmail.com}, %q{david.ruyer@gmail.com}]
12
12
  s.homepage = %q{http://github.com/apneadiving/Google-Maps-for-Rails}
13
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.}
14
+ s.description = %q{Enables easy display of items (taken from a Rails 3 model) on a Google Maps (JS API V3), OpenLayers, Mapquest, Bing and Yandex (API V2).}
15
15
  s.files = `git ls-files`.split("\n")
16
16
  s.test_files = `git ls-files -- spec/*`.split("\n")
17
17
 
18
- s.add_development_dependency "rails", "~> 3.2.1"
19
- s.add_development_dependency "sqlite3"
20
- s.add_development_dependency "mongoid", "~> 3" if RUBY_VERSION == "1.9.3"
21
- s.add_development_dependency 'jquery-rails'
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"
18
+ s.add_development_dependency "rspec", '2.14.0'
19
+ s.add_development_dependency "rake", '10.1.0'
30
20
  s.add_development_dependency 'coffee-script'
31
- # s.add_development_dependency 'guard-jasmine'
32
- # s.add_development_dependency "guard-rspec"
33
-
34
- s.add_development_dependency "factory_girl_rails"
35
- s.add_development_dependency "webmock"
36
-
21
+ s.add_development_dependency 'sprockets'
37
22
  s.add_development_dependency 'pry'
38
23
  end
@@ -0,0 +1,961 @@
1
+ (function() {
2
+ this.Gmaps = {
3
+ build: function(type, options) {
4
+ var model;
5
+ if (options == null) {
6
+ options = {};
7
+ }
8
+ model = _.isFunction(options.handler) ? options.handler : Gmaps.Objects.Handler;
9
+ return new model(type, options);
10
+ },
11
+ Builders: {},
12
+ Objects: {},
13
+ Google: {
14
+ Objects: {},
15
+ Builders: {}
16
+ }
17
+ };
18
+
19
+ }).call(this);
20
+ (function() {
21
+ var moduleKeywords,
22
+ __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
23
+
24
+ moduleKeywords = ['extended', 'included'];
25
+
26
+ this.Gmaps.Base = (function() {
27
+ function Base() {}
28
+
29
+ Base.extend = function(obj) {
30
+ var key, value, _ref;
31
+ for (key in obj) {
32
+ value = obj[key];
33
+ if (__indexOf.call(moduleKeywords, key) < 0) {
34
+ this[key] = value;
35
+ }
36
+ }
37
+ if ((_ref = obj.extended) != null) {
38
+ _ref.apply(this);
39
+ }
40
+ return this;
41
+ };
42
+
43
+ Base.include = function(obj) {
44
+ var key, value, _ref;
45
+ for (key in obj) {
46
+ value = obj[key];
47
+ if (__indexOf.call(moduleKeywords, key) < 0) {
48
+ this.prototype[key] = value;
49
+ }
50
+ }
51
+ if ((_ref = obj.included) != null) {
52
+ _ref.apply(this);
53
+ }
54
+ return this;
55
+ };
56
+
57
+ return Base;
58
+
59
+ })();
60
+
61
+ }).call(this);
62
+ (function() {
63
+ this.Gmaps.Objects.BaseBuilder = (function() {
64
+ function BaseBuilder() {}
65
+
66
+ BaseBuilder.prototype.build = function() {
67
+ return new (this.model_class())(this.serviceObject);
68
+ };
69
+
70
+ BaseBuilder.prototype.before_init = function() {};
71
+
72
+ BaseBuilder.prototype.after_init = function() {};
73
+
74
+ BaseBuilder.prototype.addListener = function(action, fn) {
75
+ return this.primitives().addListener(this.getServiceObject(), action, fn);
76
+ };
77
+
78
+ BaseBuilder.prototype.getServiceObject = function() {
79
+ return this.serviceObject;
80
+ };
81
+
82
+ BaseBuilder.prototype.primitives = function() {
83
+ return this.constructor.PRIMITIVES;
84
+ };
85
+
86
+ BaseBuilder.prototype.model_class = function() {
87
+ return this.constructor.OBJECT;
88
+ };
89
+
90
+ return BaseBuilder;
91
+
92
+ })();
93
+
94
+ }).call(this);
95
+ (function() {
96
+ this.Gmaps.Objects.Builders = function(builderClass, objectClass, primitivesProvider) {
97
+ objectClass.PRIMITIVES = primitivesProvider;
98
+ builderClass.OBJECT = objectClass;
99
+ builderClass.PRIMITIVES = primitivesProvider;
100
+ return {
101
+ build: function(args, provider_options, internal_options) {
102
+ var builder;
103
+ builder = new builderClass(args, provider_options, internal_options);
104
+ return builder.build();
105
+ }
106
+ };
107
+ };
108
+
109
+ }).call(this);
110
+ (function() {
111
+ this.Gmaps.Objects.Handler = (function() {
112
+ function Handler(type, options) {
113
+ this.type = type;
114
+ if (options == null) {
115
+ options = {};
116
+ }
117
+ this.setPrimitives(options);
118
+ this.setOptions(options);
119
+ this.resetBounds();
120
+ }
121
+
122
+ Handler.prototype.buildMap = function(options, onMapLoad) {
123
+ var _this = this;
124
+ if (onMapLoad == null) {
125
+ onMapLoad = function() {};
126
+ }
127
+ return this.map = this._map_builder().build(options, function() {
128
+ _this._createClusterer();
129
+ return onMapLoad();
130
+ });
131
+ };
132
+
133
+ Handler.prototype.addMarkers = function(markers_data, provider_options) {
134
+ var _this = this;
135
+ return _.map(markers_data, function(marker_data) {
136
+ return _this.addMarker(marker_data, provider_options);
137
+ });
138
+ };
139
+
140
+ Handler.prototype.addMarker = function(marker_data, provider_options) {
141
+ var marker;
142
+ marker = this._marker_builder().build(marker_data, provider_options, this.marker_options);
143
+ marker.setMap(this.getMap());
144
+ this.clusterer.addMarker(marker);
145
+ return marker;
146
+ };
147
+
148
+ Handler.prototype.addCircles = function(circles_data, provider_options) {
149
+ var _this = this;
150
+ return _.map(circles_data, function(circle_data) {
151
+ return _this.addCircle(circle_data, provider_options);
152
+ });
153
+ };
154
+
155
+ Handler.prototype.addCircle = function(circle_data, provider_options) {
156
+ return this._addResource('circle', circle_data, provider_options);
157
+ };
158
+
159
+ Handler.prototype.addPolylines = function(polylines_data, provider_options) {
160
+ var _this = this;
161
+ return _.map(polylines_data, function(polyline_data) {
162
+ return _this.addPolyline(polyline_data, provider_options);
163
+ });
164
+ };
165
+
166
+ Handler.prototype.addPolyline = function(polyline_data, provider_options) {
167
+ return this._addResource('polyline', polyline_data, provider_options);
168
+ };
169
+
170
+ Handler.prototype.addPolygons = function(polygons_data, provider_options) {
171
+ var _this = this;
172
+ return _.map(polygons_data, function(polygon_data) {
173
+ return _this.addPolygon(polygon_data, provider_options);
174
+ });
175
+ };
176
+
177
+ Handler.prototype.addPolygon = function(polygon_data, provider_options) {
178
+ return this._addResource('polygon', polygon_data, provider_options);
179
+ };
180
+
181
+ Handler.prototype.addKmls = function(kmls_data, provider_options) {
182
+ var _this = this;
183
+ return _.map(kmls_data, function(kml_data) {
184
+ return _this.addKml(kml_data, provider_options);
185
+ });
186
+ };
187
+
188
+ Handler.prototype.addKml = function(kml_data, provider_options) {
189
+ return this._addResource('kml', kml_data, provider_options);
190
+ };
191
+
192
+ Handler.prototype.fitMapToBounds = function() {
193
+ return this.map.fitToBounds(this.bounds.getServiceObject());
194
+ };
195
+
196
+ Handler.prototype.getMap = function() {
197
+ return this.map.getServiceObject();
198
+ };
199
+
200
+ Handler.prototype.setOptions = function(options) {
201
+ this.marker_options = _.extend(this._default_marker_options(), options.markers);
202
+ this.builders = _.extend(this._default_builders(), options.builders);
203
+ return this.models = _.extend(this._default_models(), options.models);
204
+ };
205
+
206
+ Handler.prototype.resetBounds = function() {
207
+ return this.bounds = this._bound_builder().build();
208
+ };
209
+
210
+ Handler.prototype.setPrimitives = function(options) {
211
+ return this.primitives = options.primitives === void 0 ? this._rootModule().Primitives() : _.isFunction(options.primitives) ? options.primitives() : options.primitives;
212
+ };
213
+
214
+ Handler.prototype.currentInfowindow = function() {
215
+ return this.builders.Marker.CURRENT_INFOWINDOW;
216
+ };
217
+
218
+ Handler.prototype._addResource = function(resource_name, resource_data, provider_options) {
219
+ var resource;
220
+ resource = this["_" + resource_name + "_builder"]().build(resource_data, provider_options);
221
+ resource.setMap(this.getMap());
222
+ return resource;
223
+ };
224
+
225
+ Handler.prototype._clusterize = function() {
226
+ return _.isObject(this.marker_options.clusterer);
227
+ };
228
+
229
+ Handler.prototype._createClusterer = function() {
230
+ return this.clusterer = this._clusterer_builder().build({
231
+ map: this.getMap()
232
+ }, this.marker_options.clusterer);
233
+ };
234
+
235
+ Handler.prototype._default_marker_options = function() {
236
+ return {
237
+ singleInfowindow: true,
238
+ maxRandomDistance: 100,
239
+ clusterer: {
240
+ maxZoom: 5,
241
+ gridSize: 50
242
+ }
243
+ };
244
+ };
245
+
246
+ Handler.prototype._bound_builder = function() {
247
+ return this._builder('Bound');
248
+ };
249
+
250
+ Handler.prototype._clusterer_builder = function() {
251
+ return this._builder('Clusterer');
252
+ };
253
+
254
+ Handler.prototype._marker_builder = function() {
255
+ return this._builder('Marker');
256
+ };
257
+
258
+ Handler.prototype._map_builder = function() {
259
+ return this._builder('Map');
260
+ };
261
+
262
+ Handler.prototype._kml_builder = function() {
263
+ return this._builder('Kml');
264
+ };
265
+
266
+ Handler.prototype._circle_builder = function() {
267
+ return this._builder('Circle');
268
+ };
269
+
270
+ Handler.prototype._polyline_builder = function() {
271
+ return this._builder('Polyline');
272
+ };
273
+
274
+ Handler.prototype._polygon_builder = function() {
275
+ return this._builder('Polygon');
276
+ };
277
+
278
+ Handler.prototype._builder = function(name) {
279
+ var _name;
280
+ if (this[_name = "__builder" + name] == null) {
281
+ this[_name] = Gmaps.Objects.Builders(this.builders[name], this.models[name], this.primitives);
282
+ }
283
+ return this["__builder" + name];
284
+ };
285
+
286
+ Handler.prototype._default_models = function() {
287
+ var models;
288
+ models = this._rootModule().Objects;
289
+ if (this._clusterize()) {
290
+ return models;
291
+ } else {
292
+ models.Clusterer = Gmaps.Objects.NullClusterer;
293
+ return models;
294
+ }
295
+ };
296
+
297
+ Handler.prototype._default_builders = function() {
298
+ return this._rootModule().Builders;
299
+ };
300
+
301
+ Handler.prototype._rootModule = function() {
302
+ if (this.__rootModule == null) {
303
+ this.__rootModule = Gmaps[this.type];
304
+ }
305
+ return this.__rootModule;
306
+ };
307
+
308
+ return Handler;
309
+
310
+ })();
311
+
312
+ }).call(this);
313
+ (function() {
314
+ this.Gmaps.Objects.NullClusterer = (function() {
315
+ function NullClusterer() {}
316
+
317
+ NullClusterer.prototype.addMarkers = function() {};
318
+
319
+ NullClusterer.prototype.addMarker = function() {};
320
+
321
+ NullClusterer.prototype.clear = function() {};
322
+
323
+ return NullClusterer;
324
+
325
+ })();
326
+
327
+ }).call(this);
328
+ (function() {
329
+ this.Gmaps.Google.Objects.Common = {
330
+ getServiceObject: function() {
331
+ return this.serviceObject;
332
+ },
333
+ setMap: function(map) {
334
+ return this.getServiceObject().setMap(map);
335
+ },
336
+ clear: function() {
337
+ this.serviceObject.setMap(null);
338
+ return this.serviceObject = null;
339
+ },
340
+ show: function() {
341
+ return this.serviceObject.setVisible(true);
342
+ },
343
+ hide: function() {
344
+ return this.serviceObject.setVisible(false);
345
+ },
346
+ isVisible: function() {
347
+ return this.serviceObject.getVisible();
348
+ },
349
+ primitives: function() {
350
+ return this.constructor.PRIMITIVES;
351
+ }
352
+ };
353
+
354
+ }).call(this);
355
+ (function() {
356
+ var __hasProp = {}.hasOwnProperty,
357
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
358
+
359
+ this.Gmaps.Google.Builders.Bound = (function(_super) {
360
+ __extends(Bound, _super);
361
+
362
+ function Bound(options) {
363
+ this.before_init();
364
+ this.serviceObject = new (this.primitives().latLngBounds);
365
+ this.after_init();
366
+ }
367
+
368
+ return Bound;
369
+
370
+ })(Gmaps.Objects.BaseBuilder);
371
+
372
+ }).call(this);
373
+ (function() {
374
+ var __hasProp = {}.hasOwnProperty,
375
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
376
+
377
+ this.Gmaps.Google.Builders.Circle = (function(_super) {
378
+ __extends(Circle, _super);
379
+
380
+ function Circle(args, provider_options) {
381
+ this.args = args;
382
+ this.provider_options = provider_options != null ? provider_options : {};
383
+ this.before_init();
384
+ this.serviceObject = this.create_circle();
385
+ this.after_init();
386
+ }
387
+
388
+ Circle.prototype.create_circle = function() {
389
+ return new (this.primitives().circle)(this.circle_options());
390
+ };
391
+
392
+ Circle.prototype.circle_options = function() {
393
+ var base_options;
394
+ base_options = {
395
+ center: new (this.primitives().latLng)(this.args.lat, this.args.lng),
396
+ radius: this.args.radius
397
+ };
398
+ return _.defaults(base_options, this.provider_options);
399
+ };
400
+
401
+ return Circle;
402
+
403
+ })(Gmaps.Objects.BaseBuilder);
404
+
405
+ }).call(this);
406
+ (function() {
407
+ var __hasProp = {}.hasOwnProperty,
408
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
409
+
410
+ this.Gmaps.Google.Builders.Clusterer = (function(_super) {
411
+ __extends(Clusterer, _super);
412
+
413
+ function Clusterer(args, options) {
414
+ this.args = args;
415
+ this.options = options;
416
+ this.before_init();
417
+ this.serviceObject = new (this.primitives().clusterer)(this.args.map, [], this.options);
418
+ this.after_init();
419
+ }
420
+
421
+ return Clusterer;
422
+
423
+ })(Gmaps.Objects.BaseBuilder);
424
+
425
+ }).call(this);
426
+ (function() {
427
+ var __hasProp = {}.hasOwnProperty,
428
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
429
+
430
+ this.Gmaps.Google.Builders.Kml = (function(_super) {
431
+ __extends(Kml, _super);
432
+
433
+ function Kml(args, provider_options) {
434
+ this.args = args;
435
+ this.provider_options = provider_options != null ? provider_options : {};
436
+ this.before_init();
437
+ this.serviceObject = this.create_kml();
438
+ this.after_init();
439
+ }
440
+
441
+ Kml.prototype.create_kml = function() {
442
+ return new (this.primitives().kml)(this.args.url, this.kml_options());
443
+ };
444
+
445
+ Kml.prototype.kml_options = function() {
446
+ var base_options;
447
+ base_options = {};
448
+ return _.defaults(base_options, this.provider_options);
449
+ };
450
+
451
+ return Kml;
452
+
453
+ })(Gmaps.Objects.BaseBuilder);
454
+
455
+ }).call(this);
456
+ (function() {
457
+ var __hasProp = {}.hasOwnProperty,
458
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
459
+
460
+ this.Gmaps.Google.Builders.Map = (function(_super) {
461
+ __extends(Map, _super);
462
+
463
+ function Map(options, onMapLoad) {
464
+ var provider_options;
465
+ this.before_init();
466
+ provider_options = _.extend(this.default_options(), options.provider);
467
+ this.internal_options = options.internal;
468
+ this.serviceObject = new (this.primitives().map)(document.getElementById(this.internal_options.id), provider_options);
469
+ this.on_map_load(onMapLoad);
470
+ this.after_init();
471
+ }
472
+
473
+ Map.prototype.build = function() {
474
+ return new (this.model_class())(this.serviceObject, this.primitives());
475
+ };
476
+
477
+ Map.prototype.on_map_load = function(onMapLoad) {
478
+ return this.primitives().addListenerOnce(this.serviceObject, 'idle', onMapLoad);
479
+ };
480
+
481
+ Map.prototype.default_options = function() {
482
+ return {
483
+ mapTypeId: this.primitives().mapTypes('ROADMAP'),
484
+ center: this.primitives().latLng(0, 0),
485
+ zoom: 8
486
+ };
487
+ };
488
+
489
+ return Map;
490
+
491
+ })(Gmaps.Objects.BaseBuilder);
492
+
493
+ }).call(this);
494
+ (function() {
495
+ var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
496
+ __hasProp = {}.hasOwnProperty,
497
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
498
+
499
+ this.Gmaps.Google.Builders.Marker = (function(_super) {
500
+ __extends(Marker, _super);
501
+
502
+ Marker.CURRENT_INFOWINDOW = void 0;
503
+
504
+ Marker.CACHE_STORE = {};
505
+
506
+ function Marker(args, provider_options, internal_options) {
507
+ this.args = args;
508
+ this.provider_options = provider_options != null ? provider_options : {};
509
+ this.internal_options = internal_options != null ? internal_options : {};
510
+ this.infowindow_binding = __bind(this.infowindow_binding, this);
511
+ this.before_init();
512
+ this.create_marker();
513
+ this.create_infowindow();
514
+ this.after_init();
515
+ }
516
+
517
+ Marker.prototype.build = function() {
518
+ return new (this.model_class())(this.serviceObject, this.infowindow);
519
+ };
520
+
521
+ Marker.prototype.create_marker = function() {
522
+ return this.serviceObject = new (this.primitives().marker)(this.marker_options());
523
+ };
524
+
525
+ Marker.prototype.create_infowindow = function() {
526
+ if (!_.isString(this.args.infowindow)) {
527
+ return null;
528
+ }
529
+ this.infowindow = new (this.primitives().infowindow)({
530
+ content: this.args.infowindow
531
+ });
532
+ return this.bind_infowindow();
533
+ };
534
+
535
+ Marker.prototype.marker_options = function() {
536
+ var base_options, coords;
537
+ coords = this._randomized_coordinates();
538
+ base_options = {
539
+ title: this.args.marker_title,
540
+ position: new (this.primitives().latLng)(coords[0], coords[1]),
541
+ icon: this._get_picture('picture'),
542
+ shadow: this._get_picture('shadow')
543
+ };
544
+ return _.extend(this.provider_options, base_options);
545
+ };
546
+
547
+ Marker.prototype.bind_infowindow = function() {
548
+ return this.addListener('click', this.infowindow_binding);
549
+ };
550
+
551
+ Marker.prototype.infowindow_binding = function() {
552
+ this.panTo();
553
+ if (this._should_close_infowindow()) {
554
+ this.constructor.CURRENT_INFOWINDOW.close();
555
+ }
556
+ this.infowindow.open(this.getServiceObject().getMap(), this.getServiceObject());
557
+ return this.constructor.CURRENT_INFOWINDOW = this.infowindow;
558
+ };
559
+
560
+ Marker.prototype.panTo = function() {
561
+ return this.getServiceObject().getMap().panTo(this.getServiceObject().getPosition());
562
+ };
563
+
564
+ Marker.prototype._get_picture = function(picture_name) {
565
+ if (!_.isObject(this.args[picture_name]) || !_.isString(this.args[picture_name].url)) {
566
+ return null;
567
+ }
568
+ return this._create_or_retrieve_image(this._picture_args(picture_name));
569
+ };
570
+
571
+ Marker.prototype._create_or_retrieve_image = function(picture_args) {
572
+ if (this.constructor.CACHE_STORE[picture_args.url] === void 0) {
573
+ this.constructor.CACHE_STORE[picture_args.url] = new (this.primitives().markerImage)(picture_args.url, picture_args.size, picture_args.origin, picture_args.anchor, picture_args.scaledSize);
574
+ }
575
+ return this.constructor.CACHE_STORE[picture_args.url];
576
+ };
577
+
578
+ Marker.prototype._picture_args = function(picture_name) {
579
+ return {
580
+ url: this.args[picture_name].url,
581
+ anchor: this._createImageAnchorPosition(this.args[picture_name].anchor),
582
+ size: new (this.primitives().size)(this.args[picture_name].width, this.args[picture_name].height),
583
+ scaledSize: null,
584
+ origin: null
585
+ };
586
+ };
587
+
588
+ Marker.prototype._createImageAnchorPosition = function(anchorLocation) {
589
+ if (!_.isArray(anchorLocation)) {
590
+ return null;
591
+ }
592
+ return new (this.primitives().point)(anchorLocation[0], anchorLocation[1]);
593
+ };
594
+
595
+ Marker.prototype._should_close_infowindow = function() {
596
+ return this.internal_options.singleInfowindow && (this.constructor.CURRENT_INFOWINDOW != null);
597
+ };
598
+
599
+ Marker.prototype._randomized_coordinates = function() {
600
+ var Lat, Lng, dx, dy, random;
601
+ if (!_.isNumber(this.internal_options.maxRandomDistance)) {
602
+ return [this.args.lat, this.args.lng];
603
+ }
604
+ random = function() {
605
+ return Math.random() * 2 - 1;
606
+ };
607
+ dx = this.internal_options.maxRandomDistance * random();
608
+ dy = this.internal_options.maxRandomDistance * random();
609
+ Lat = parseFloat(this.args.lat) + (180 / Math.PI) * (dy / 6378137);
610
+ Lng = parseFloat(this.args.lng) + (90 / Math.PI) * (dx / 6378137) / Math.cos(this.args.lat);
611
+ return [Lat, Lng];
612
+ };
613
+
614
+ return Marker;
615
+
616
+ })(Gmaps.Objects.BaseBuilder);
617
+
618
+ }).call(this);
619
+ (function() {
620
+ var __hasProp = {}.hasOwnProperty,
621
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
622
+
623
+ this.Gmaps.Google.Builders.Polygon = (function(_super) {
624
+ __extends(Polygon, _super);
625
+
626
+ function Polygon(args, provider_options) {
627
+ this.args = args;
628
+ this.provider_options = provider_options != null ? provider_options : {};
629
+ this.before_init();
630
+ this.serviceObject = this.create_polygon();
631
+ this.after_init();
632
+ }
633
+
634
+ Polygon.prototype.create_polygon = function() {
635
+ return new (this.primitives().polygon)(this.polygon_options());
636
+ };
637
+
638
+ Polygon.prototype.polygon_options = function() {
639
+ var base_options;
640
+ base_options = {
641
+ path: this._build_path()
642
+ };
643
+ return _.defaults(base_options, this.provider_options);
644
+ };
645
+
646
+ Polygon.prototype._build_path = function() {
647
+ var _this = this;
648
+ return _.map(this.args, function(arg) {
649
+ return new (_this.primitives().latLng)(arg.lat, arg.lng);
650
+ });
651
+ };
652
+
653
+ return Polygon;
654
+
655
+ })(Gmaps.Objects.BaseBuilder);
656
+
657
+ }).call(this);
658
+ (function() {
659
+ var __hasProp = {}.hasOwnProperty,
660
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
661
+
662
+ this.Gmaps.Google.Builders.Polyline = (function(_super) {
663
+ __extends(Polyline, _super);
664
+
665
+ function Polyline(args, provider_options) {
666
+ this.args = args;
667
+ this.provider_options = provider_options != null ? provider_options : {};
668
+ this.before_init();
669
+ this.serviceObject = this.create_polyline();
670
+ this.after_init();
671
+ }
672
+
673
+ Polyline.prototype.create_polyline = function() {
674
+ return new (this.primitives().polyline)(this.polyline_options());
675
+ };
676
+
677
+ Polyline.prototype.polyline_options = function() {
678
+ var base_options;
679
+ base_options = {
680
+ path: this._build_path()
681
+ };
682
+ return _.defaults(base_options, this.provider_options);
683
+ };
684
+
685
+ Polyline.prototype._build_path = function() {
686
+ var _this = this;
687
+ return _.map(this.args, function(arg) {
688
+ return new (_this.primitives().latLng)(arg.lat, arg.lng);
689
+ });
690
+ };
691
+
692
+ return Polyline;
693
+
694
+ })(Gmaps.Objects.BaseBuilder);
695
+
696
+ }).call(this);
697
+ (function() {
698
+ var __hasProp = {}.hasOwnProperty,
699
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
700
+
701
+ this.Gmaps.Google.Objects.Bound = (function(_super) {
702
+ __extends(Bound, _super);
703
+
704
+ Bound.include(Gmaps.Google.Objects.Common);
705
+
706
+ function Bound(serviceObject) {
707
+ this.serviceObject = serviceObject;
708
+ }
709
+
710
+ Bound.prototype.extendWith = function(array_or_object) {
711
+ var collection,
712
+ _this = this;
713
+ collection = _.isArray(array_or_object) ? array_or_object : [array_or_object];
714
+ return _.each(collection, function(object) {
715
+ return object.updateBounds(_this);
716
+ });
717
+ };
718
+
719
+ Bound.prototype.extend = function(value) {
720
+ return this.getServiceObject().extend(value);
721
+ };
722
+
723
+ return Bound;
724
+
725
+ })(Gmaps.Base);
726
+
727
+ }).call(this);
728
+ (function() {
729
+ var __hasProp = {}.hasOwnProperty,
730
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
731
+
732
+ this.Gmaps.Google.Objects.Circle = (function(_super) {
733
+ __extends(Circle, _super);
734
+
735
+ Circle.include(Gmaps.Google.Objects.Common);
736
+
737
+ function Circle(serviceObject) {
738
+ this.serviceObject = serviceObject;
739
+ }
740
+
741
+ Circle.prototype.updateBounds = function(bounds) {
742
+ bounds.extend(this.getServiceObject().getBounds().getNorthEast());
743
+ return bounds.extend(this.getServiceObject().getBounds().getSouthWest());
744
+ };
745
+
746
+ return Circle;
747
+
748
+ })(Gmaps.Base);
749
+
750
+ }).call(this);
751
+ (function() {
752
+ var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
753
+
754
+ this.Gmaps.Google.Objects.Clusterer = (function() {
755
+ function Clusterer(serviceObject) {
756
+ this.serviceObject = serviceObject;
757
+ this.clear = __bind(this.clear, this);
758
+ this.addMarker = __bind(this.addMarker, this);
759
+ this.addMarkers = __bind(this.addMarkers, this);
760
+ }
761
+
762
+ Clusterer.prototype.addMarkers = function(markers) {
763
+ var _this = this;
764
+ return _.each(markers, function(marker) {
765
+ return _this.addMarker(marker);
766
+ });
767
+ };
768
+
769
+ Clusterer.prototype.addMarker = function(marker) {
770
+ return this.serviceObject.addMarker(marker.serviceObject);
771
+ };
772
+
773
+ Clusterer.prototype.clear = function() {
774
+ return this.serviceObject.clearMarkers();
775
+ };
776
+
777
+ return Clusterer;
778
+
779
+ })();
780
+
781
+ }).call(this);
782
+ (function() {
783
+ var __hasProp = {}.hasOwnProperty,
784
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
785
+
786
+ this.Gmaps.Google.Objects.Kml = (function(_super) {
787
+ __extends(Kml, _super);
788
+
789
+ function Kml(serviceObject) {
790
+ this.serviceObject = serviceObject;
791
+ }
792
+
793
+ Kml.prototype.updateBounds = function(bounds) {};
794
+
795
+ Kml.prototype.setMap = function(map) {
796
+ return this.getServiceObject().setMap(map);
797
+ };
798
+
799
+ Kml.prototype.getServiceObject = function() {
800
+ return this.serviceObject;
801
+ };
802
+
803
+ Kml.prototype.primitives = function() {
804
+ return this.constructor.PRIMITIVES;
805
+ };
806
+
807
+ return Kml;
808
+
809
+ })(Gmaps.Base);
810
+
811
+ }).call(this);
812
+ (function() {
813
+ var __hasProp = {}.hasOwnProperty,
814
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
815
+
816
+ this.Gmaps.Google.Objects.Map = (function(_super) {
817
+ __extends(Map, _super);
818
+
819
+ function Map(serviceObject) {
820
+ this.serviceObject = serviceObject;
821
+ }
822
+
823
+ Map.prototype.getServiceObject = function() {
824
+ return this.serviceObject;
825
+ };
826
+
827
+ Map.prototype.centerOn = function(position) {
828
+ return this.getServiceObject().setCenter(this.primitives().latLngFromPosition(position));
829
+ };
830
+
831
+ Map.prototype.fitToBounds = function(boundsObject) {
832
+ if (!boundsObject.isEmpty()) {
833
+ return this.getServiceObject().fitBounds(boundsObject);
834
+ }
835
+ };
836
+
837
+ Map.prototype.primitives = function() {
838
+ return this.constructor.PRIMITIVES;
839
+ };
840
+
841
+ return Map;
842
+
843
+ })(Gmaps.Base);
844
+
845
+ }).call(this);
846
+ (function() {
847
+ var __hasProp = {}.hasOwnProperty,
848
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
849
+
850
+ this.Gmaps.Google.Objects.Marker = (function(_super) {
851
+ __extends(Marker, _super);
852
+
853
+ Marker.include(Gmaps.Google.Objects.Common);
854
+
855
+ function Marker(serviceObject, infowindow) {
856
+ this.serviceObject = serviceObject;
857
+ this.infowindow = infowindow;
858
+ }
859
+
860
+ Marker.prototype.updateBounds = function(bounds) {
861
+ return bounds.extend(this.getServiceObject().position);
862
+ };
863
+
864
+ Marker.prototype.panTo = function() {
865
+ return this.getServiceObject().getMap().panTo(this.getServiceObject().getPosition());
866
+ };
867
+
868
+ return Marker;
869
+
870
+ })(Gmaps.Base);
871
+
872
+ }).call(this);
873
+ (function() {
874
+ var __hasProp = {}.hasOwnProperty,
875
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
876
+
877
+ this.Gmaps.Google.Objects.Polygon = (function(_super) {
878
+ __extends(Polygon, _super);
879
+
880
+ Polygon.include(Gmaps.Google.Objects.Common);
881
+
882
+ function Polygon(serviceObject) {
883
+ this.serviceObject = serviceObject;
884
+ }
885
+
886
+ Polygon.prototype.updateBounds = function(bounds) {};
887
+
888
+ return Polygon;
889
+
890
+ })(Gmaps.Base);
891
+
892
+ }).call(this);
893
+ (function() {
894
+ var __hasProp = {}.hasOwnProperty,
895
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
896
+
897
+ this.Gmaps.Google.Objects.Polyline = (function(_super) {
898
+ __extends(Polyline, _super);
899
+
900
+ Polyline.include(Gmaps.Google.Objects.Common);
901
+
902
+ function Polyline(serviceObject) {
903
+ this.serviceObject = serviceObject;
904
+ }
905
+
906
+ Polyline.prototype.updateBounds = function(bounds) {};
907
+
908
+ return Polyline;
909
+
910
+ })(Gmaps.Base);
911
+
912
+ }).call(this);
913
+ (function() {
914
+ this.Gmaps.Google.Primitives = function() {
915
+ var factory;
916
+ factory = {
917
+ point: google.maps.Point,
918
+ size: google.maps.Size,
919
+ circle: google.maps.Circle,
920
+ latLng: google.maps.LatLng,
921
+ latLngBounds: google.maps.LatLngBounds,
922
+ map: google.maps.Map,
923
+ mapTypez: google.maps.MapTypeId,
924
+ markerImage: google.maps.MarkerImage,
925
+ marker: google.maps.Marker,
926
+ infowindow: google.maps.InfoWindow,
927
+ listener: google.maps.event.addListener,
928
+ clusterer: MarkerClusterer,
929
+ listenerOnce: google.maps.event.addListenerOnce,
930
+ polyline: google.maps.Polyline,
931
+ polygon: google.maps.Polygon,
932
+ kml: google.maps.KmlLayer,
933
+ addListener: function(object, event_name, fn) {
934
+ return factory.listener(object, event_name, fn);
935
+ },
936
+ addListenerOnce: function(object, event_name, fn) {
937
+ return factory.listenerOnce(object, event_name, fn);
938
+ },
939
+ mapTypes: function(type) {
940
+ return factory.mapTypez[type];
941
+ },
942
+ latLngFromPosition: function(position) {
943
+ if (_.isArray(position)) {
944
+ return new factory.latLng(position[0], position[1]);
945
+ } else {
946
+ if (_.isNumber(position.lat) && _.isNumber(position.lng)) {
947
+ return new factory.latLng(position.lat, position.lng);
948
+ } else {
949
+ return position;
950
+ }
951
+ }
952
+ }
953
+ };
954
+ return factory;
955
+ };
956
+
957
+ }).call(this);
958
+ (function() {
959
+
960
+
961
+ }).call(this);