travlrmap 0.0.11 → 0.0.12

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.
@@ -10,6 +10,10 @@
10
10
  :overview_control: false
11
11
  :pan_control: true
12
12
  :title: My Travels
13
+ :cluster: true
14
+ :cluster_grid_size: 40
15
+ :cluster_minumum_size: 2
16
+ :cluster_zoom_on_click: true
13
17
 
14
18
  :views:
15
19
  :default:
@@ -26,7 +30,10 @@
26
30
  :types:
27
31
  :visit:
28
32
  :icon: http://your.site/markers/mini-ORANGE-BLANK.png
33
+ :description: Visit
29
34
  :transit:
30
35
  :icon: http://your.site/markers/mini-BLUE-BLANK.png
36
+ :description: Transit
31
37
  :lived:
32
38
  :icon: http://your.site/markers/mini-GREEN-BLANK.png
39
+ :description: Lived
@@ -51,6 +51,14 @@ module Travlrmap
51
51
  @pan_control = @map[:pan_control].nil? ? true : @map[:pan_control]
52
52
  end
53
53
 
54
+ def to_json
55
+ @points.sort_by{|p| p[:country]}.map do |point|
56
+ point[:popup_html] = erb(:"_point_comment", :layout => false, :locals => {:point => point})
57
+ point[:icon] = @types[ point[:type] ][:icon]
58
+ point
59
+ end.to_json
60
+ end
61
+
54
62
  def to_kml
55
63
  require 'ruby_kml'
56
64
 
@@ -99,11 +107,16 @@ module Travlrmap
99
107
  erb :index
100
108
  end
101
109
 
102
- get '/kml' do
110
+ get '/points/kml' do
103
111
  content_type :"application/vnd.google-earth.kml+xml"
104
112
  to_kml
105
113
  end
106
114
 
115
+ get '/points/json' do
116
+ content_type :"application/json"
117
+ to_json
118
+ end
119
+
107
120
  get '/images/*' do
108
121
  requested_file = params[:splat].first
109
122
  file = File.expand_path(File.join("images", requested_file), APPROOT)
@@ -1,3 +1,3 @@
1
1
  module Travlmap
2
- VERSION = "0.0.11"
2
+ VERSION = "0.0.12"
3
3
  end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,21 @@
1
+ (function(){var d=null;function e(a){return function(b){this[a]=b}}function h(a){return function(){return this[a]}}var j;
2
+ function k(a,b,c){this.extend(k,google.maps.OverlayView);this.c=a;this.a=[];this.f=[];this.ca=[53,56,66,78,90];this.j=[];this.A=!1;c=c||{};this.g=c.gridSize||60;this.l=c.minimumClusterSize||2;this.J=c.maxZoom||d;this.j=c.styles||[];this.X=c.imagePath||this.Q;this.W=c.imageExtension||this.P;this.O=!0;if(c.zoomOnClick!=void 0)this.O=c.zoomOnClick;this.r=!1;if(c.averageCenter!=void 0)this.r=c.averageCenter;l(this);this.setMap(a);this.K=this.c.getZoom();var f=this;google.maps.event.addListener(this.c,
3
+ "zoom_changed",function(){var a=f.c.getZoom();if(f.K!=a)f.K=a,f.m()});google.maps.event.addListener(this.c,"idle",function(){f.i()});b&&b.length&&this.C(b,!1)}j=k.prototype;j.Q="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/images/m";j.P="png";j.extend=function(a,b){return function(a){for(var b in a.prototype)this.prototype[b]=a.prototype[b];return this}.apply(a,[b])};j.onAdd=function(){if(!this.A)this.A=!0,n(this)};j.draw=function(){};
4
+ function l(a){if(!a.j.length)for(var b=0,c;c=a.ca[b];b++)a.j.push({url:a.X+(b+1)+"."+a.W,height:c,width:c})}j.S=function(){for(var a=this.o(),b=new google.maps.LatLngBounds,c=0,f;f=a[c];c++)b.extend(f.getPosition());this.c.fitBounds(b)};j.z=h("j");j.o=h("a");j.V=function(){return this.a.length};j.ba=e("J");j.I=h("J");j.G=function(a,b){for(var c=0,f=a.length,g=f;g!==0;)g=parseInt(g/10,10),c++;c=Math.min(c,b);return{text:f,index:c}};j.$=e("G");j.H=h("G");
5
+ j.C=function(a,b){for(var c=0,f;f=a[c];c++)q(this,f);b||this.i()};function q(a,b){b.s=!1;b.draggable&&google.maps.event.addListener(b,"dragend",function(){b.s=!1;a.L()});a.a.push(b)}j.q=function(a,b){q(this,a);b||this.i()};function r(a,b){var c=-1;if(a.a.indexOf)c=a.a.indexOf(b);else for(var f=0,g;g=a.a[f];f++)if(g==b){c=f;break}if(c==-1)return!1;b.setMap(d);a.a.splice(c,1);return!0}j.Y=function(a,b){var c=r(this,a);return!b&&c?(this.m(),this.i(),!0):!1};
6
+ j.Z=function(a,b){for(var c=!1,f=0,g;g=a[f];f++)g=r(this,g),c=c||g;if(!b&&c)return this.m(),this.i(),!0};j.U=function(){return this.f.length};j.getMap=h("c");j.setMap=e("c");j.w=h("g");j.aa=e("g");
7
+ j.v=function(a){var b=this.getProjection(),c=new google.maps.LatLng(a.getNorthEast().lat(),a.getNorthEast().lng()),f=new google.maps.LatLng(a.getSouthWest().lat(),a.getSouthWest().lng()),c=b.fromLatLngToDivPixel(c);c.x+=this.g;c.y-=this.g;f=b.fromLatLngToDivPixel(f);f.x-=this.g;f.y+=this.g;c=b.fromDivPixelToLatLng(c);b=b.fromDivPixelToLatLng(f);a.extend(c);a.extend(b);return a};j.R=function(){this.m(!0);this.a=[]};
8
+ j.m=function(a){for(var b=0,c;c=this.f[b];b++)c.remove();for(b=0;c=this.a[b];b++)c.s=!1,a&&c.setMap(d);this.f=[]};j.L=function(){var a=this.f.slice();this.f.length=0;this.m();this.i();window.setTimeout(function(){for(var b=0,c;c=a[b];b++)c.remove()},0)};j.i=function(){n(this)};
9
+ function n(a){if(a.A)for(var b=a.v(new google.maps.LatLngBounds(a.c.getBounds().getSouthWest(),a.c.getBounds().getNorthEast())),c=0,f;f=a.a[c];c++)if(!f.s&&b.contains(f.getPosition())){for(var g=a,u=4E4,o=d,v=0,m=void 0;m=g.f[v];v++){var i=m.getCenter();if(i){var p=f.getPosition();if(!i||!p)i=0;else var w=(p.lat()-i.lat())*Math.PI/180,x=(p.lng()-i.lng())*Math.PI/180,i=Math.sin(w/2)*Math.sin(w/2)+Math.cos(i.lat()*Math.PI/180)*Math.cos(p.lat()*Math.PI/180)*Math.sin(x/2)*Math.sin(x/2),i=6371*2*Math.atan2(Math.sqrt(i),
10
+ Math.sqrt(1-i));i<u&&(u=i,o=m)}}o&&o.F.contains(f.getPosition())?o.q(f):(m=new s(g),m.q(f),g.f.push(m))}}function s(a){this.k=a;this.c=a.getMap();this.g=a.w();this.l=a.l;this.r=a.r;this.d=d;this.a=[];this.F=d;this.n=new t(this,a.z(),a.w())}j=s.prototype;
11
+ j.q=function(a){var b;a:if(this.a.indexOf)b=this.a.indexOf(a)!=-1;else{b=0;for(var c;c=this.a[b];b++)if(c==a){b=!0;break a}b=!1}if(b)return!1;if(this.d){if(this.r)c=this.a.length+1,b=(this.d.lat()*(c-1)+a.getPosition().lat())/c,c=(this.d.lng()*(c-1)+a.getPosition().lng())/c,this.d=new google.maps.LatLng(b,c),y(this)}else this.d=a.getPosition(),y(this);a.s=!0;this.a.push(a);b=this.a.length;b<this.l&&a.getMap()!=this.c&&a.setMap(this.c);if(b==this.l)for(c=0;c<b;c++)this.a[c].setMap(d);b>=this.l&&a.setMap(d);
12
+ a=this.c.getZoom();if((b=this.k.I())&&a>b)for(a=0;b=this.a[a];a++)b.setMap(this.c);else if(this.a.length<this.l)z(this.n);else{b=this.k.H()(this.a,this.k.z().length);this.n.setCenter(this.d);a=this.n;a.B=b;a.ga=b.text;a.ea=b.index;if(a.b)a.b.innerHTML=b.text;b=Math.max(0,a.B.index-1);b=Math.min(a.j.length-1,b);b=a.j[b];a.da=b.url;a.h=b.height;a.p=b.width;a.M=b.textColor;a.e=b.anchor;a.N=b.textSize;a.D=b.backgroundPosition;this.n.show()}return!0};
13
+ j.getBounds=function(){for(var a=new google.maps.LatLngBounds(this.d,this.d),b=this.o(),c=0,f;f=b[c];c++)a.extend(f.getPosition());return a};j.remove=function(){this.n.remove();this.a.length=0;delete this.a};j.T=function(){return this.a.length};j.o=h("a");j.getCenter=h("d");function y(a){a.F=a.k.v(new google.maps.LatLngBounds(a.d,a.d))}j.getMap=h("c");
14
+ function t(a,b,c){a.k.extend(t,google.maps.OverlayView);this.j=b;this.fa=c||0;this.u=a;this.d=d;this.c=a.getMap();this.B=this.b=d;this.t=!1;this.setMap(this.c)}j=t.prototype;
15
+ j.onAdd=function(){this.b=document.createElement("DIV");if(this.t)this.b.style.cssText=A(this,B(this,this.d)),this.b.innerHTML=this.B.text;this.getPanes().overlayMouseTarget.appendChild(this.b);var a=this;google.maps.event.addDomListener(this.b,"click",function(){var b=a.u.k;google.maps.event.trigger(b,"clusterclick",a.u);b.O&&a.c.fitBounds(a.u.getBounds())})};function B(a,b){var c=a.getProjection().fromLatLngToDivPixel(b);c.x-=parseInt(a.p/2,10);c.y-=parseInt(a.h/2,10);return c}
16
+ j.draw=function(){if(this.t){var a=B(this,this.d);this.b.style.top=a.y+"px";this.b.style.left=a.x+"px"}};function z(a){if(a.b)a.b.style.display="none";a.t=!1}j.show=function(){if(this.b)this.b.style.cssText=A(this,B(this,this.d)),this.b.style.display="";this.t=!0};j.remove=function(){this.setMap(d)};j.onRemove=function(){if(this.b&&this.b.parentNode)z(this),this.b.parentNode.removeChild(this.b),this.b=d};j.setCenter=e("d");
17
+ function A(a,b){var c=[];c.push("background-image:url("+a.da+");");c.push("background-position:"+(a.D?a.D:"0 0")+";");typeof a.e==="object"?(typeof a.e[0]==="number"&&a.e[0]>0&&a.e[0]<a.h?c.push("height:"+(a.h-a.e[0])+"px; padding-top:"+a.e[0]+"px;"):c.push("height:"+a.h+"px; line-height:"+a.h+"px;"),typeof a.e[1]==="number"&&a.e[1]>0&&a.e[1]<a.p?c.push("width:"+(a.p-a.e[1])+"px; padding-left:"+a.e[1]+"px;"):c.push("width:"+a.p+"px; text-align:center;")):c.push("height:"+a.h+"px; line-height:"+a.h+
18
+ "px; width:"+a.p+"px; text-align:center;");c.push("cursor:pointer; top:"+b.y+"px; left:"+b.x+"px; color:"+(a.M?a.M:"black")+"; position:absolute; font-size:"+(a.N?a.N:11)+"px; font-family:Arial,sans-serif; font-weight:bold");return c.join("")}window.MarkerClusterer=k;k.prototype.addMarker=k.prototype.q;k.prototype.addMarkers=k.prototype.C;k.prototype.clearMarkers=k.prototype.R;k.prototype.fitMapToMarkers=k.prototype.S;k.prototype.getCalculator=k.prototype.H;k.prototype.getGridSize=k.prototype.w;
19
+ k.prototype.getExtendedBounds=k.prototype.v;k.prototype.getMap=k.prototype.getMap;k.prototype.getMarkers=k.prototype.o;k.prototype.getMaxZoom=k.prototype.I;k.prototype.getStyles=k.prototype.z;k.prototype.getTotalClusters=k.prototype.U;k.prototype.getTotalMarkers=k.prototype.V;k.prototype.redraw=k.prototype.i;k.prototype.removeMarker=k.prototype.Y;k.prototype.removeMarkers=k.prototype.Z;k.prototype.resetViewport=k.prototype.m;k.prototype.repaint=k.prototype.L;k.prototype.setCalculator=k.prototype.$;
20
+ k.prototype.setGridSize=k.prototype.aa;k.prototype.setMaxZoom=k.prototype.ba;k.prototype.onAdd=k.prototype.onAdd;k.prototype.draw=k.prototype.draw;s.prototype.getCenter=s.prototype.getCenter;s.prototype.getSize=s.prototype.T;s.prototype.getMarkers=s.prototype.o;t.prototype.onAdd=t.prototype.onAdd;t.prototype.draw=t.prototype.draw;t.prototype.onRemove=t.prototype.onRemove;
21
+ })();
data/views/_map_js.erb CHANGED
@@ -1,5 +1,25 @@
1
1
  <script type="text/javascript">
2
2
  var map;
3
+
4
+ function addPoints(data) {
5
+ var markers_data = [];
6
+ if (data.length > 0) {
7
+ for (var i = 0; i < data.length; i++) {
8
+ markers_data.push({
9
+ lat: data[i].lat,
10
+ lng: data[i].lon,
11
+ title: data[i].title,
12
+ icon: data[i].icon,
13
+ infoWindow: {
14
+ content: data[i].popup_html
15
+ },
16
+ });
17
+ }
18
+ }
19
+
20
+ map.addMarkers(markers_data);
21
+ }
22
+
3
23
  $(document).ready(function(){
4
24
  infoWindow = new google.maps.InfoWindow({});
5
25
  map = new GMaps({
@@ -7,18 +27,20 @@
7
27
  zoom: <%= @map_view[:zoom] %>,
8
28
  lat: <%= @map_view[:lat] %>,
9
29
  lng: <%= @map_view[:lon] %>,
10
- });
11
- map.loadFromKML({
12
- url: '<%= base_url %>/kml?t=<%= (Time.now.to_i/600.to_f).round * 600 %>',
13
- suppressInfoWindows: true,
14
- preserveViewport: true,
15
- events: {
16
- click: function(point){
17
- infoWindow.setContent(point.featureData.infoWindowHtml);
18
- infoWindow.setPosition(point.latLng);
19
- infoWindow.open(map.map);
30
+ <% if @map[:cluster] %>
31
+ markerClusterer: function(map) {
32
+ options = {
33
+ gridSize: <%= @map.fetch(:cluster_grid_size, 40) %>,
34
+ minimumClusterSize: <%= @map.fetch(:cluster_minumum_size, 2) %>,
35
+ zoomOnClick: <%= @map.fetch(:cluster_zoom_on_click, true) %>
36
+ };
37
+
38
+ return new MarkerClusterer(map, [], options);
20
39
  }
21
- }
40
+ <% end %>
22
41
  });
42
+
43
+ points = $.getJSON("/points/json");
44
+ points.done(addPoints);
23
45
  });
24
46
  </script>
data/views/layout.erb CHANGED
@@ -16,6 +16,7 @@
16
16
  <link rel="stylesheet" href="///maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
17
17
  <link rel="stylesheet" href="/travlrmap.css">
18
18
  <script src="/gmaps.js"></script>
19
+ <script src="/markerclusterer_compiled.js"></script>
19
20
 
20
21
  <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
21
22
  <!--[if lt IE 9]>
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: travlrmap
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 7
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 11
10
- version: 0.0.11
9
+ - 12
10
+ version: 0.0.12
11
11
  platform: ruby
12
12
  authors:
13
13
  - R.I.Pienaar
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2015-01-02 00:00:00 +00:00
18
+ date: 2015-01-03 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -137,8 +137,23 @@ files:
137
137
  - views/_point_comment.erb
138
138
  - views/_footer.erb
139
139
  - views/_map_js.erb
140
+ - public/images/conv30.png
141
+ - public/images/conv50.png
142
+ - public/images/m1.png
143
+ - public/images/conv40.png
144
+ - public/images/people55.png
145
+ - public/images/people45.png
146
+ - public/images/heart50.png
147
+ - public/images/heart40.png
148
+ - public/images/m4.png
149
+ - public/images/m5.png
150
+ - public/images/people35.png
151
+ - public/images/m3.png
152
+ - public/images/heart30.png
153
+ - public/images/m2.png
140
154
  - public/travlrmap.css
141
155
  - public/favicon.ico
156
+ - public/markerclusterer_compiled.js
142
157
  - public/gmaps.js
143
158
  - public/markers/marker-PURPLE-BLANK.png
144
159
  - public/markers/mini-RED-BLANK.png