travlrmap 0.0.14 → 0.0.15
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/Gemfile.lock +2 -1
- data/config/travlrmap.yaml.dist +2 -1
- data/lib/travlrmap/sinatra_app.rb +23 -0
- data/lib/travlrmap/version.rb +1 -1
- data/public/cluster/cluster-AQUA-1.png +0 -0
- data/public/cluster/cluster-AQUA-2.png +0 -0
- data/public/cluster/cluster-BLACK-1.png +0 -0
- data/public/cluster/cluster-BLACK-2.png +0 -0
- data/public/cluster/cluster-BLUE-1.png +0 -0
- data/public/cluster/cluster-BLUE-2.png +0 -0
- data/public/cluster/cluster-FUCHSIA-1.png +0 -0
- data/public/cluster/cluster-FUCHSIA-2.png +0 -0
- data/public/cluster/cluster-GRAY-1.png +0 -0
- data/public/cluster/cluster-GRAY-2.png +0 -0
- data/public/cluster/cluster-GREEN-1.png +0 -0
- data/public/cluster/cluster-GREEN-2.png +0 -0
- data/public/cluster/cluster-LIME-1.png +0 -0
- data/public/cluster/cluster-LIME-2.png +0 -0
- data/public/cluster/cluster-MAROON-1.png +0 -0
- data/public/cluster/cluster-MAROON-2.png +0 -0
- data/public/cluster/cluster-NAVY-1.png +0 -0
- data/public/cluster/cluster-NAVY-2.png +0 -0
- data/public/cluster/cluster-OLIVE-1.png +0 -0
- data/public/cluster/cluster-OLIVE-2.png +0 -0
- data/public/cluster/cluster-ORANGE-1.png +0 -0
- data/public/cluster/cluster-ORANGE-2.png +0 -0
- data/public/cluster/cluster-PURPLE-1.png +0 -0
- data/public/cluster/cluster-PURPLE-2.png +0 -0
- data/public/cluster/cluster-RED-1.png +0 -0
- data/public/cluster/cluster-RED-2.png +0 -0
- data/public/cluster/cluster-SILVER-1.png +0 -0
- data/public/cluster/cluster-SILVER-2.png +0 -0
- data/public/cluster/cluster-TEAL-1.png +0 -0
- data/public/cluster/cluster-TEAL-2.png +0 -0
- data/public/cluster/cluster-WHITE-1.png +0 -0
- data/public/cluster/cluster-WHITE-2.png +0 -0
- data/public/cluster/cluster-YELLOW-1.png +0 -0
- data/public/cluster/cluster-YELLOW-2.png +0 -0
- data/public/js-yaml.min.js +3 -0
- data/public/moment.js +3043 -0
- data/views/_map_js.erb +1 -1
- data/views/_point_comment.erb +7 -5
- data/views/geolocate.erb +203 -0
- data/views/layout.erb +8 -1
- metadata +23 -4
data/views/_map_js.erb
CHANGED
@@ -33,7 +33,7 @@
|
|
33
33
|
gridSize: <%= @map.fetch(:cluster_grid_size, 40) %>,
|
34
34
|
minimumClusterSize: <%= @map.fetch(:cluster_minumum_size, 2) %>,
|
35
35
|
zoomOnClick: <%= @map.fetch(:cluster_zoom_on_click, true) %>,
|
36
|
-
imagePath: '<%= @map.fetch(:cluster_image_path, "/cluster/
|
36
|
+
imagePath: '<%= @map.fetch(:cluster_image_path, "/cluster/m") %>',
|
37
37
|
imageExtension: '<%= @map.fetch(:cluster_image_extension, "png") %>',
|
38
38
|
<% if @map.include?(:cluster_image_sizes) %>
|
39
39
|
imageSizes: [<%= @map[:cluster_image_sizes].join(",") %>],
|
data/views/_point_comment.erb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
<p>
|
2
2
|
<font size="+2"><%= point[:title] %></font>
|
3
3
|
<hr>
|
4
|
-
<% if point
|
4
|
+
<% if !point.fetch(:comment, "").empty? %>
|
5
5
|
<%= h point[:comment] %><br /><br />
|
6
6
|
<% end %>
|
7
7
|
|
8
|
-
<% if point
|
8
|
+
<% if !point.fetch(:href, "").empty? %>
|
9
9
|
<a href='<%= point[:href] %>' target='_blank'>
|
10
|
-
<% if point
|
11
|
-
<% if point
|
10
|
+
<% if !point.fetch(:linkimg, "").empty? || !point.fetch(:linktext, "").empty? %>
|
11
|
+
<% if !point.fetch(:linkimg, "").empty? %>
|
12
12
|
<img src='<%= point[:linkimg] %>'><br />
|
13
13
|
<% end %>
|
14
|
-
<% if point
|
14
|
+
<% if !point.fetch(:linktext, "").empty? %>
|
15
15
|
<%= h point[:linktext] %>
|
16
16
|
<% end %>
|
17
17
|
<% else %>
|
@@ -20,3 +20,5 @@
|
|
20
20
|
</a>
|
21
21
|
<% end %>
|
22
22
|
</p>
|
23
|
+
<p>
|
24
|
+
<font weight"-2"><%= h @types[ point[:type] ][:description] %><% if point[:date] %> on <%= h point[:date] %><% end %>
|
data/views/geolocate.erb
ADDED
@@ -0,0 +1,203 @@
|
|
1
|
+
<div class="row">
|
2
|
+
<form id="search_box">
|
3
|
+
<div class="col-md-9">
|
4
|
+
<input type="text" class="form-control" id="location">
|
5
|
+
</div>
|
6
|
+
<div class="col-md-1">
|
7
|
+
<button type="submit" class="btn btn-primary">Search</button>
|
8
|
+
</div>
|
9
|
+
</form>
|
10
|
+
</div>
|
11
|
+
<div class="row"><div class="col-md-12"> </div></div>
|
12
|
+
<div class="row" style="height: 80%">
|
13
|
+
<div class="col-md-9" style="height: 100%">
|
14
|
+
<div class="map" id="main_map"> </div>
|
15
|
+
</div>
|
16
|
+
<div class="col-md-3">
|
17
|
+
<form id="point_info">
|
18
|
+
<div class="form-group">
|
19
|
+
<input type="text" class="form-control" id="point_title" placeholder="Title">
|
20
|
+
</div>
|
21
|
+
<div class="form-group">
|
22
|
+
<input type="text" class="form-control" id="point_comment" placeholder="Comment">
|
23
|
+
</div>
|
24
|
+
<div class="form-group">
|
25
|
+
<select id="point_type" class="form-control">
|
26
|
+
<% @types.each do |name, type| %>
|
27
|
+
<option value="<%= name %>"><%= type[:description] %></option>
|
28
|
+
<% end %>
|
29
|
+
</select>
|
30
|
+
</div>
|
31
|
+
<div class="form-group">
|
32
|
+
<input type="text" class="form-control" id="point_date" placeholder="yyyy-mm-dd">
|
33
|
+
</div>
|
34
|
+
<div class="form-group">
|
35
|
+
<input type="text" class="form-control" id="point_href" placeholder="Link URL">
|
36
|
+
</div>
|
37
|
+
<div class="form-group">
|
38
|
+
<input type="text" class="form-control" id="point_linktext" placeholder="Link Text">
|
39
|
+
</div>
|
40
|
+
<div class="form-group">
|
41
|
+
<input type="text" class="form-control" id="point_linkimg" placeholder="Link Image URL">
|
42
|
+
</div>
|
43
|
+
<div class="form-group">
|
44
|
+
<input type="text" class="form-control" id="point_country" placeholder="Country">
|
45
|
+
</div>
|
46
|
+
<div class="form-group">
|
47
|
+
<button type="submit" class="btn btn-primary">Preview</button>
|
48
|
+
</div>
|
49
|
+
</form>
|
50
|
+
</div>
|
51
|
+
</div>
|
52
|
+
<div class="row">
|
53
|
+
<div class="col-md-9"><center>Perform a search to place a marker or right click to place one anywhere.</center></div>
|
54
|
+
</div>
|
55
|
+
|
56
|
+
<script type="text/javascript">
|
57
|
+
var map;
|
58
|
+
var marker;
|
59
|
+
|
60
|
+
function getLocationName(results) {
|
61
|
+
var addrComponents = results[0].address_components;
|
62
|
+
|
63
|
+
for (var i = 0; i < addrComponents.length; i++) {
|
64
|
+
if (addrComponents[i].types[0] == "point_of_interest") {
|
65
|
+
return addrComponents[i].long_name;
|
66
|
+
}
|
67
|
+
|
68
|
+
if (addrComponents[i].types[0] == "postal_town") {
|
69
|
+
return addrComponents[i].long_name;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
return results[0].formatted_address;
|
74
|
+
}
|
75
|
+
|
76
|
+
function getCountry(results) {
|
77
|
+
var addrComponents = results[0].address_components;
|
78
|
+
|
79
|
+
for (var i = 0; i < addrComponents.length; i++) {
|
80
|
+
if (addrComponents[i].types[0] == "country") {
|
81
|
+
return addrComponents[i].long_name;
|
82
|
+
}
|
83
|
+
|
84
|
+
if (addrComponents[i].types.length == 2) {
|
85
|
+
if (addrComponents[i].types[0] == "political") {
|
86
|
+
return addrComponents[i].long_name;
|
87
|
+
}
|
88
|
+
}
|
89
|
+
}
|
90
|
+
return "n/a";
|
91
|
+
}
|
92
|
+
|
93
|
+
function updateForm(results, status, createMarker) {
|
94
|
+
if (status == google.maps.GeocoderStatus.OK) {
|
95
|
+
var latlng = results[0].geometry.location;
|
96
|
+
|
97
|
+
if (createMarker) {
|
98
|
+
map.setZoom(15);
|
99
|
+
map.setCenter(latlng.lat(), latlng.lng());
|
100
|
+
marker = map.addMarker({
|
101
|
+
lat: latlng.lat(),
|
102
|
+
lng: latlng.lng(),
|
103
|
+
});
|
104
|
+
}
|
105
|
+
|
106
|
+
document.getElementById('point_title').value = getLocationName(results);
|
107
|
+
document.getElementById('point_country').value = getCountry(results);
|
108
|
+
document.getElementById('point_date').value = moment().format("YYYY-MM-DD");
|
109
|
+
} else {
|
110
|
+
alert("Geocode was not successful for the following reason: " + status);
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
$(document).ready(function() {
|
115
|
+
map = new GMaps({
|
116
|
+
div: '#main_map',
|
117
|
+
zoom: 3,
|
118
|
+
lat: 20,
|
119
|
+
lng: 0,
|
120
|
+
});
|
121
|
+
|
122
|
+
GMaps.on('rightclick', map.map, function(event) {
|
123
|
+
var lat = event.latLng.lat();
|
124
|
+
var lng = event.latLng.lng();
|
125
|
+
|
126
|
+
map.removeMarkers();
|
127
|
+
map.setCenter(lat, lng);
|
128
|
+
|
129
|
+
marker = map.addMarker({
|
130
|
+
lat: lat,
|
131
|
+
lng: lng,
|
132
|
+
});
|
133
|
+
|
134
|
+
GMaps.geocode({
|
135
|
+
lat: lat,
|
136
|
+
lng: lng,
|
137
|
+
callback: function(results, status) {
|
138
|
+
updateForm(results, status, false)
|
139
|
+
}
|
140
|
+
});
|
141
|
+
});
|
142
|
+
|
143
|
+
$('#point_info').submit(function(e) {
|
144
|
+
e.preventDefault();
|
145
|
+
|
146
|
+
var point = {};
|
147
|
+
point.type = document.getElementById('point_type').value
|
148
|
+
point.title = document.getElementById('point_title').value
|
149
|
+
point.comment = document.getElementById('point_comment').value
|
150
|
+
point.country = document.getElementById('point_country').value
|
151
|
+
point.date = document.getElementById('point_date').value
|
152
|
+
point.href = document.getElementById('point_href').value
|
153
|
+
point.linktext = document.getElementById('point_linktext').value
|
154
|
+
point.linkimg = document.getElementById('point_linkimg').value
|
155
|
+
point.lon = marker.position.lng();
|
156
|
+
point.lat = marker.position.lat();
|
157
|
+
|
158
|
+
document.getElementById('preview_html').innerHTML = "Validating point and fetching preview...";
|
159
|
+
document.getElementById('preview_yaml').innerHTML = "";
|
160
|
+
|
161
|
+
$('#myModal').modal({});
|
162
|
+
|
163
|
+
$.post("/points/validate", JSON.stringify(point), function(data) {
|
164
|
+
alert("Response: " + JSON.stringify(data));
|
165
|
+
document.getElementById('preview_html').innerHTML = data.html;
|
166
|
+
document.getElementById('preview_yaml').innerHTML = "<pre>" + data.yaml + "</pre>";
|
167
|
+
});
|
168
|
+
});
|
169
|
+
|
170
|
+
$('#search_box').submit(function(e) {
|
171
|
+
e.preventDefault();
|
172
|
+
map.removeMarkers();
|
173
|
+
|
174
|
+
GMaps.geocode({
|
175
|
+
address: $('#location').val().trim(),
|
176
|
+
callback: function(results, status) {
|
177
|
+
updateForm(results, status, true)
|
178
|
+
}
|
179
|
+
});
|
180
|
+
});
|
181
|
+
});
|
182
|
+
</script>
|
183
|
+
|
184
|
+
<!-- modal popup for point preview -->
|
185
|
+
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
186
|
+
<div class="modal-dialog">
|
187
|
+
<div class="modal-content">
|
188
|
+
<div class="modal-header">
|
189
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
190
|
+
<h4 class="modal-title" id="myModalLabel">Point Preview</h4>
|
191
|
+
</div>
|
192
|
+
<div class="modal-body">
|
193
|
+
<div id="preview_html" align="center">
|
194
|
+
</div>
|
195
|
+
<div id="preview_yaml">
|
196
|
+
</div>
|
197
|
+
</div>
|
198
|
+
<div class="modal-footer">
|
199
|
+
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
200
|
+
</div>
|
201
|
+
</div>
|
202
|
+
</div>
|
203
|
+
</div>
|
data/views/layout.erb
CHANGED
@@ -17,6 +17,8 @@
|
|
17
17
|
<link rel="stylesheet" href="/travlrmap.css">
|
18
18
|
<script src="/gmaps.js"></script>
|
19
19
|
<script src="/markerclusterer_compiled.js"></script>
|
20
|
+
<script src="/moment.js"></script>
|
21
|
+
<script src="/js-yaml.min.js"></script>
|
20
22
|
|
21
23
|
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
22
24
|
<!--[if lt IE 9]>
|
@@ -39,7 +41,7 @@
|
|
39
41
|
<a class="navbar-brand" href="/"><%= @map[:title] %></a>
|
40
42
|
</div>
|
41
43
|
<div id="navbar" class="collapse navbar-collapse">
|
42
|
-
<ul class="nav navbar-nav">
|
44
|
+
<ul class="nav navbar-nav navbar-left">
|
43
45
|
<li class="dropdown">
|
44
46
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Views <span class="caret"></span></a>
|
45
47
|
<ul class="dropdown-menu" role="menu">
|
@@ -49,6 +51,11 @@
|
|
49
51
|
</ul>
|
50
52
|
</li>
|
51
53
|
</ul>
|
54
|
+
<% if @map[:show_geocode_link] %>
|
55
|
+
<ul class="nav navbar-nav navbar-right">
|
56
|
+
<li><a href="/geocode">Geocode</a></li>
|
57
|
+
</ul>
|
58
|
+
<% end %>
|
52
59
|
</div>
|
53
60
|
</div>
|
54
61
|
</nav>
|
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:
|
4
|
+
hash: 1
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 15
|
10
|
+
version: 0.0.15
|
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-
|
18
|
+
date: 2015-01-07 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -120,6 +120,22 @@ dependencies:
|
|
120
120
|
version: 1.5.2
|
121
121
|
type: :runtime
|
122
122
|
version_requirements: *id007
|
123
|
+
- !ruby/object:Gem::Dependency
|
124
|
+
name: rack
|
125
|
+
prerelease: false
|
126
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
128
|
+
requirements:
|
129
|
+
- - "="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
hash: 7
|
132
|
+
segments:
|
133
|
+
- 1
|
134
|
+
- 5
|
135
|
+
- 2
|
136
|
+
version: 1.5.2
|
137
|
+
type: :runtime
|
138
|
+
version_requirements: *id008
|
123
139
|
description: "description: Sinatra based map builder"
|
124
140
|
email: rip@devco.net
|
125
141
|
executables: []
|
@@ -136,8 +152,10 @@ files:
|
|
136
152
|
- views/index.erb
|
137
153
|
- views/_point_comment.erb
|
138
154
|
- views/_map_js.erb
|
155
|
+
- views/geolocate.erb
|
139
156
|
- public/travlrmap.css
|
140
157
|
- public/favicon.ico
|
158
|
+
- public/js-yaml.min.js
|
141
159
|
- public/markerclusterer_compiled.js
|
142
160
|
- public/gmaps.js
|
143
161
|
- public/markers/marker-NAVY-MINI.png
|
@@ -281,6 +299,7 @@ files:
|
|
281
299
|
- public/cluster/m2.png
|
282
300
|
- public/cluster/cluster-PURPLE-5.png
|
283
301
|
- public/cluster/cluster-MAROON-4.png
|
302
|
+
- public/moment.js
|
284
303
|
- config/travlrmap.yaml.dist
|
285
304
|
- config.ru
|
286
305
|
- Gemfile
|