├── README.md
├── index.html
├── lib
├── bootstrap
│ ├── css
│ │ ├── bootstrap-theme.css
│ │ ├── bootstrap-theme.css.map
│ │ ├── bootstrap-theme.min.css
│ │ ├── bootstrap-theme.min.css.map
│ │ ├── bootstrap.css
│ │ ├── bootstrap.css.map
│ │ ├── bootstrap.min.css
│ │ └── bootstrap.min.css.map
│ ├── fonts
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ ├── glyphicons-halflings-regular.woff
│ │ └── glyphicons-halflings-regular.woff2
│ └── js
│ │ ├── bootstrap-datepicker.js
│ │ ├── bootstrap.js
│ │ ├── bootstrap.min.js
│ │ └── npm.js
├── easy-button
│ ├── easy-button.css
│ └── easy-button.js
├── jquery
│ └── jquery-2.2.0.min.js
├── leaflet
│ ├── images
│ │ ├── layers-2x.png
│ │ ├── layers.png
│ │ ├── marker-icon-2x.png
│ │ ├── marker-icon.png
│ │ └── marker-shadow.png
│ ├── leaflet-src.js
│ ├── leaflet.css
│ └── leaflet.js
├── roslib
│ ├── eventemitter2.min.js
│ └── roslib.min.js
└── sweetalert
│ ├── sweetalert.css
│ └── sweetalert.min.js
├── screenshot.png
└── scripts.js
/README.md:
--------------------------------------------------------------------------------
1 | # ROS-OSM-map-integration
2 |
3 | This application is designed to display an OSM map with Leaflet in a browser, but while being connected to ROS, so it can display the position of the bot using a marker. You can also tap for a destination on the screen, and the app will set the position wanted in the ROS params. To make the routing from your current position to the point you've clicked on, please refer to my ROS module [Routing-ROS-Module](https://github.com/sylvainar/Routing-ROS-Module).
4 |
5 | 
6 |
7 | *A screenshot and the integration of the module on a car (Lab ai2, UPV)*
8 |
9 | ## Installation
10 |
11 | This is not actually a ROS package, but it connects to ROS to get informations from GPS sensor, and uses some ROS functionnality, for instance ROS param, ROS topic, etc.
12 |
13 | To allow this application to connect with ROS, you need to install RosBridge, who is kind of a bridge to connect some Javascript apps to the ROS core. To do so, please follow the tutorial [here](http://wiki.ros.org/rosbridge_suite/Tutorials/RunningRosbridge).
14 |
15 | In order to launch rosbridge with the rest of your stuff, you can add this to your launch file :
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | And then, open the page `index.html` with your favourite browser, and you're ready. You can even set the default page of your browser to it, so it opens automatically on startup.
25 |
26 |
27 | ## Configuration
28 |
29 | The configuration of the module can be modified just by changing the value at the top of the script.js file.
30 |
31 | - `CONFIG_default_gps_topic_name` : Set the name of the GPS topic the app is going to listen to
32 | - `CONFIG_cycles_number` : If the GPS is publishing really really fast, the app doesn't have the time to update the marker at each cycle, causing some delay. This parameters sets the number of cycles between each actualisation.
33 | - `CONFIG_tile_source` : Set the source of the tiles for the map. If you downloaded the maps of the area you want to move in, then you can set it to `local`. Else, set it to `server`.
34 | - `CONFIG_tile_local_path` : Path to the downloaded tiles
35 | - `CONFIG_ROS_server_URI` : Route to ROS server. It could be localhost or an IP.
36 |
37 | ## Parameters
38 |
39 | In the lab, we're working with two differents GPS, which are not publishing on the same topic and at the same frequency. So two parameters can be set :
40 | - `/panel/gps_topic` for the GPS topic's name. Example : `/gps`
41 | - `/panel/nb_cycles` for the number of cycles between each refreshing. Example : `20`
42 |
43 | You can set those in a ROS launch file, or set it using `rosparam set`, then refreshing the page in the browser by clicking on the refresh button.
44 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Robotnik panel
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/lib/bootstrap/css/bootstrap-theme.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.6 (http://getbootstrap.com)
3 | * Copyright 2011-2015 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 | .btn-default,
7 | .btn-primary,
8 | .btn-success,
9 | .btn-info,
10 | .btn-warning,
11 | .btn-danger {
12 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
13 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
14 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
15 | }
16 | .btn-default:active,
17 | .btn-primary:active,
18 | .btn-success:active,
19 | .btn-info:active,
20 | .btn-warning:active,
21 | .btn-danger:active,
22 | .btn-default.active,
23 | .btn-primary.active,
24 | .btn-success.active,
25 | .btn-info.active,
26 | .btn-warning.active,
27 | .btn-danger.active {
28 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
29 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
30 | }
31 | .btn-default.disabled,
32 | .btn-primary.disabled,
33 | .btn-success.disabled,
34 | .btn-info.disabled,
35 | .btn-warning.disabled,
36 | .btn-danger.disabled,
37 | .btn-default[disabled],
38 | .btn-primary[disabled],
39 | .btn-success[disabled],
40 | .btn-info[disabled],
41 | .btn-warning[disabled],
42 | .btn-danger[disabled],
43 | fieldset[disabled] .btn-default,
44 | fieldset[disabled] .btn-primary,
45 | fieldset[disabled] .btn-success,
46 | fieldset[disabled] .btn-info,
47 | fieldset[disabled] .btn-warning,
48 | fieldset[disabled] .btn-danger {
49 | -webkit-box-shadow: none;
50 | box-shadow: none;
51 | }
52 | .btn-default .badge,
53 | .btn-primary .badge,
54 | .btn-success .badge,
55 | .btn-info .badge,
56 | .btn-warning .badge,
57 | .btn-danger .badge {
58 | text-shadow: none;
59 | }
60 | .btn:active,
61 | .btn.active {
62 | background-image: none;
63 | }
64 | .btn-default {
65 | text-shadow: 0 1px 0 #fff;
66 | background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
67 | background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
68 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
69 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
70 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
71 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
72 | background-repeat: repeat-x;
73 | border-color: #dbdbdb;
74 | border-color: #ccc;
75 | }
76 | .btn-default:hover,
77 | .btn-default:focus {
78 | background-color: #e0e0e0;
79 | background-position: 0 -15px;
80 | }
81 | .btn-default:active,
82 | .btn-default.active {
83 | background-color: #e0e0e0;
84 | border-color: #dbdbdb;
85 | }
86 | .btn-default.disabled,
87 | .btn-default[disabled],
88 | fieldset[disabled] .btn-default,
89 | .btn-default.disabled:hover,
90 | .btn-default[disabled]:hover,
91 | fieldset[disabled] .btn-default:hover,
92 | .btn-default.disabled:focus,
93 | .btn-default[disabled]:focus,
94 | fieldset[disabled] .btn-default:focus,
95 | .btn-default.disabled.focus,
96 | .btn-default[disabled].focus,
97 | fieldset[disabled] .btn-default.focus,
98 | .btn-default.disabled:active,
99 | .btn-default[disabled]:active,
100 | fieldset[disabled] .btn-default:active,
101 | .btn-default.disabled.active,
102 | .btn-default[disabled].active,
103 | fieldset[disabled] .btn-default.active {
104 | background-color: #e0e0e0;
105 | background-image: none;
106 | }
107 | .btn-primary {
108 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
109 | background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
110 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
111 | background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
112 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
113 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
114 | background-repeat: repeat-x;
115 | border-color: #245580;
116 | }
117 | .btn-primary:hover,
118 | .btn-primary:focus {
119 | background-color: #265a88;
120 | background-position: 0 -15px;
121 | }
122 | .btn-primary:active,
123 | .btn-primary.active {
124 | background-color: #265a88;
125 | border-color: #245580;
126 | }
127 | .btn-primary.disabled,
128 | .btn-primary[disabled],
129 | fieldset[disabled] .btn-primary,
130 | .btn-primary.disabled:hover,
131 | .btn-primary[disabled]:hover,
132 | fieldset[disabled] .btn-primary:hover,
133 | .btn-primary.disabled:focus,
134 | .btn-primary[disabled]:focus,
135 | fieldset[disabled] .btn-primary:focus,
136 | .btn-primary.disabled.focus,
137 | .btn-primary[disabled].focus,
138 | fieldset[disabled] .btn-primary.focus,
139 | .btn-primary.disabled:active,
140 | .btn-primary[disabled]:active,
141 | fieldset[disabled] .btn-primary:active,
142 | .btn-primary.disabled.active,
143 | .btn-primary[disabled].active,
144 | fieldset[disabled] .btn-primary.active {
145 | background-color: #265a88;
146 | background-image: none;
147 | }
148 | .btn-success {
149 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
150 | background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
151 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
152 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
153 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
154 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
155 | background-repeat: repeat-x;
156 | border-color: #3e8f3e;
157 | }
158 | .btn-success:hover,
159 | .btn-success:focus {
160 | background-color: #419641;
161 | background-position: 0 -15px;
162 | }
163 | .btn-success:active,
164 | .btn-success.active {
165 | background-color: #419641;
166 | border-color: #3e8f3e;
167 | }
168 | .btn-success.disabled,
169 | .btn-success[disabled],
170 | fieldset[disabled] .btn-success,
171 | .btn-success.disabled:hover,
172 | .btn-success[disabled]:hover,
173 | fieldset[disabled] .btn-success:hover,
174 | .btn-success.disabled:focus,
175 | .btn-success[disabled]:focus,
176 | fieldset[disabled] .btn-success:focus,
177 | .btn-success.disabled.focus,
178 | .btn-success[disabled].focus,
179 | fieldset[disabled] .btn-success.focus,
180 | .btn-success.disabled:active,
181 | .btn-success[disabled]:active,
182 | fieldset[disabled] .btn-success:active,
183 | .btn-success.disabled.active,
184 | .btn-success[disabled].active,
185 | fieldset[disabled] .btn-success.active {
186 | background-color: #419641;
187 | background-image: none;
188 | }
189 | .btn-info {
190 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
191 | background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
192 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
193 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
194 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
195 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
196 | background-repeat: repeat-x;
197 | border-color: #28a4c9;
198 | }
199 | .btn-info:hover,
200 | .btn-info:focus {
201 | background-color: #2aabd2;
202 | background-position: 0 -15px;
203 | }
204 | .btn-info:active,
205 | .btn-info.active {
206 | background-color: #2aabd2;
207 | border-color: #28a4c9;
208 | }
209 | .btn-info.disabled,
210 | .btn-info[disabled],
211 | fieldset[disabled] .btn-info,
212 | .btn-info.disabled:hover,
213 | .btn-info[disabled]:hover,
214 | fieldset[disabled] .btn-info:hover,
215 | .btn-info.disabled:focus,
216 | .btn-info[disabled]:focus,
217 | fieldset[disabled] .btn-info:focus,
218 | .btn-info.disabled.focus,
219 | .btn-info[disabled].focus,
220 | fieldset[disabled] .btn-info.focus,
221 | .btn-info.disabled:active,
222 | .btn-info[disabled]:active,
223 | fieldset[disabled] .btn-info:active,
224 | .btn-info.disabled.active,
225 | .btn-info[disabled].active,
226 | fieldset[disabled] .btn-info.active {
227 | background-color: #2aabd2;
228 | background-image: none;
229 | }
230 | .btn-warning {
231 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
232 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
233 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
234 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
235 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
236 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
237 | background-repeat: repeat-x;
238 | border-color: #e38d13;
239 | }
240 | .btn-warning:hover,
241 | .btn-warning:focus {
242 | background-color: #eb9316;
243 | background-position: 0 -15px;
244 | }
245 | .btn-warning:active,
246 | .btn-warning.active {
247 | background-color: #eb9316;
248 | border-color: #e38d13;
249 | }
250 | .btn-warning.disabled,
251 | .btn-warning[disabled],
252 | fieldset[disabled] .btn-warning,
253 | .btn-warning.disabled:hover,
254 | .btn-warning[disabled]:hover,
255 | fieldset[disabled] .btn-warning:hover,
256 | .btn-warning.disabled:focus,
257 | .btn-warning[disabled]:focus,
258 | fieldset[disabled] .btn-warning:focus,
259 | .btn-warning.disabled.focus,
260 | .btn-warning[disabled].focus,
261 | fieldset[disabled] .btn-warning.focus,
262 | .btn-warning.disabled:active,
263 | .btn-warning[disabled]:active,
264 | fieldset[disabled] .btn-warning:active,
265 | .btn-warning.disabled.active,
266 | .btn-warning[disabled].active,
267 | fieldset[disabled] .btn-warning.active {
268 | background-color: #eb9316;
269 | background-image: none;
270 | }
271 | .btn-danger {
272 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
273 | background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
274 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
275 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
276 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
277 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
278 | background-repeat: repeat-x;
279 | border-color: #b92c28;
280 | }
281 | .btn-danger:hover,
282 | .btn-danger:focus {
283 | background-color: #c12e2a;
284 | background-position: 0 -15px;
285 | }
286 | .btn-danger:active,
287 | .btn-danger.active {
288 | background-color: #c12e2a;
289 | border-color: #b92c28;
290 | }
291 | .btn-danger.disabled,
292 | .btn-danger[disabled],
293 | fieldset[disabled] .btn-danger,
294 | .btn-danger.disabled:hover,
295 | .btn-danger[disabled]:hover,
296 | fieldset[disabled] .btn-danger:hover,
297 | .btn-danger.disabled:focus,
298 | .btn-danger[disabled]:focus,
299 | fieldset[disabled] .btn-danger:focus,
300 | .btn-danger.disabled.focus,
301 | .btn-danger[disabled].focus,
302 | fieldset[disabled] .btn-danger.focus,
303 | .btn-danger.disabled:active,
304 | .btn-danger[disabled]:active,
305 | fieldset[disabled] .btn-danger:active,
306 | .btn-danger.disabled.active,
307 | .btn-danger[disabled].active,
308 | fieldset[disabled] .btn-danger.active {
309 | background-color: #c12e2a;
310 | background-image: none;
311 | }
312 | .thumbnail,
313 | .img-thumbnail {
314 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
315 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
316 | }
317 | .dropdown-menu > li > a:hover,
318 | .dropdown-menu > li > a:focus {
319 | background-color: #e8e8e8;
320 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
321 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
322 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
323 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
324 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
325 | background-repeat: repeat-x;
326 | }
327 | .dropdown-menu > .active > a,
328 | .dropdown-menu > .active > a:hover,
329 | .dropdown-menu > .active > a:focus {
330 | background-color: #2e6da4;
331 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
332 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
333 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
334 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
335 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
336 | background-repeat: repeat-x;
337 | }
338 | .navbar-default {
339 | background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
340 | background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
341 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
342 | background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
343 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
344 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
345 | background-repeat: repeat-x;
346 | border-radius: 4px;
347 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
348 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
349 | }
350 | .navbar-default .navbar-nav > .open > a,
351 | .navbar-default .navbar-nav > .active > a {
352 | background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
353 | background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
354 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
355 | background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
356 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
357 | background-repeat: repeat-x;
358 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
359 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
360 | }
361 | .navbar-brand,
362 | .navbar-nav > li > a {
363 | text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
364 | }
365 | .navbar-inverse {
366 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
367 | background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
368 | background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
369 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
370 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
371 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
372 | background-repeat: repeat-x;
373 | border-radius: 4px;
374 | }
375 | .navbar-inverse .navbar-nav > .open > a,
376 | .navbar-inverse .navbar-nav > .active > a {
377 | background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
378 | background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
379 | background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
380 | background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
381 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
382 | background-repeat: repeat-x;
383 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
384 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
385 | }
386 | .navbar-inverse .navbar-brand,
387 | .navbar-inverse .navbar-nav > li > a {
388 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
389 | }
390 | .navbar-static-top,
391 | .navbar-fixed-top,
392 | .navbar-fixed-bottom {
393 | border-radius: 0;
394 | }
395 | @media (max-width: 767px) {
396 | .navbar .navbar-nav .open .dropdown-menu > .active > a,
397 | .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
398 | .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
399 | color: #fff;
400 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
401 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
402 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
403 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
404 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
405 | background-repeat: repeat-x;
406 | }
407 | }
408 | .alert {
409 | text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
410 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
411 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
412 | }
413 | .alert-success {
414 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
415 | background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
416 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
417 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
418 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
419 | background-repeat: repeat-x;
420 | border-color: #b2dba1;
421 | }
422 | .alert-info {
423 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
424 | background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
425 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
426 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
427 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
428 | background-repeat: repeat-x;
429 | border-color: #9acfea;
430 | }
431 | .alert-warning {
432 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
433 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
434 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
435 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
436 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
437 | background-repeat: repeat-x;
438 | border-color: #f5e79e;
439 | }
440 | .alert-danger {
441 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
442 | background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
443 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
444 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
445 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
446 | background-repeat: repeat-x;
447 | border-color: #dca7a7;
448 | }
449 | .progress {
450 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
451 | background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
452 | background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
453 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
454 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
455 | background-repeat: repeat-x;
456 | }
457 | .progress-bar {
458 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
459 | background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
460 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
461 | background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
462 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
463 | background-repeat: repeat-x;
464 | }
465 | .progress-bar-success {
466 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
467 | background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
468 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
469 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
470 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
471 | background-repeat: repeat-x;
472 | }
473 | .progress-bar-info {
474 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
475 | background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
476 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
477 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
478 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
479 | background-repeat: repeat-x;
480 | }
481 | .progress-bar-warning {
482 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
483 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
484 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
485 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
486 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
487 | background-repeat: repeat-x;
488 | }
489 | .progress-bar-danger {
490 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
491 | background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
492 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
493 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
494 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
495 | background-repeat: repeat-x;
496 | }
497 | .progress-bar-striped {
498 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
499 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
500 | background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
501 | }
502 | .list-group {
503 | border-radius: 4px;
504 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
505 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
506 | }
507 | .list-group-item.active,
508 | .list-group-item.active:hover,
509 | .list-group-item.active:focus {
510 | text-shadow: 0 -1px 0 #286090;
511 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
512 | background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
513 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
514 | background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
515 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
516 | background-repeat: repeat-x;
517 | border-color: #2b669a;
518 | }
519 | .list-group-item.active .badge,
520 | .list-group-item.active:hover .badge,
521 | .list-group-item.active:focus .badge {
522 | text-shadow: none;
523 | }
524 | .panel {
525 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
526 | box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
527 | }
528 | .panel-default > .panel-heading {
529 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
530 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
531 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
532 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
533 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
534 | background-repeat: repeat-x;
535 | }
536 | .panel-primary > .panel-heading {
537 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
538 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
539 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
540 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
541 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
542 | background-repeat: repeat-x;
543 | }
544 | .panel-success > .panel-heading {
545 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
546 | background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
547 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
548 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
549 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
550 | background-repeat: repeat-x;
551 | }
552 | .panel-info > .panel-heading {
553 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
554 | background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
555 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
556 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
557 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
558 | background-repeat: repeat-x;
559 | }
560 | .panel-warning > .panel-heading {
561 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
562 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
563 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
564 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
565 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
566 | background-repeat: repeat-x;
567 | }
568 | .panel-danger > .panel-heading {
569 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
570 | background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
571 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
572 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
573 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
574 | background-repeat: repeat-x;
575 | }
576 | .well {
577 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
578 | background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
579 | background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
580 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
581 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
582 | background-repeat: repeat-x;
583 | border-color: #dcdcdc;
584 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
585 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
586 | }
587 | /*# sourceMappingURL=bootstrap-theme.css.map */
588 |
--------------------------------------------------------------------------------
/lib/bootstrap/css/bootstrap-theme.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.6 (http://getbootstrap.com)
3 | * Copyright 2011-2015 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
6 | /*# sourceMappingURL=bootstrap-theme.min.css.map */
--------------------------------------------------------------------------------
/lib/bootstrap/css/bootstrap-theme.min.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":";;;;AAmBA,YAAA,aAAA,UAAA,aAAA,aAAA,aAME,YAAA,EAAA,KAAA,EAAA,eC2CA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBDvCR,mBAAA,mBAAA,oBAAA,oBAAA,iBAAA,iBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBCsCA,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBDlCR,qBAAA,sBAAA,sBAAA,uBAAA,mBAAA,oBAAA,sBAAA,uBAAA,sBAAA,uBAAA,sBAAA,uBAAA,+BAAA,gCAAA,6BAAA,gCAAA,gCAAA,gCCiCA,mBAAA,KACQ,WAAA,KDlDV,mBAAA,oBAAA,iBAAA,oBAAA,oBAAA,oBAuBI,YAAA,KAyCF,YAAA,YAEE,iBAAA,KAKJ,aErEI,YAAA,EAAA,IAAA,EAAA,KACA,iBAAA,iDACA,iBAAA,4CAAA,iBAAA,qEAEA,iBAAA,+CCnBF,OAAA,+GH4CA,OAAA,0DACA,kBAAA,SAuC2C,aAAA,QAA2B,aAAA,KArCtE,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAgBN,aEtEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAiBN,aEvEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAkBN,UExEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,gBAAA,gBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,iBAAA,iBAEE,iBAAA,QACA,aAAA,QAMA,mBAAA,0BAAA,yBAAA,0BAAA,yBAAA,yBAAA,oBAAA,2BAAA,0BAAA,2BAAA,0BAAA,0BAAA,6BAAA,oCAAA,mCAAA,oCAAA,mCAAA,mCAME,iBAAA,QACA,iBAAA,KAmBN,aEzEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAoBN,YE1EI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,kBAAA,kBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,mBAAA,mBAEE,iBAAA,QACA,aAAA,QAMA,qBAAA,4BAAA,2BAAA,4BAAA,2BAAA,2BAAA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,+BAAA,sCAAA,qCAAA,sCAAA,qCAAA,qCAME,iBAAA,QACA,iBAAA,KA2BN,eAAA,WClCE,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBD2CV,0BAAA,0BE3FI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GF0FF,kBAAA,SAEF,yBAAA,+BAAA,+BEhGI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GFgGF,kBAAA,SASF,gBE7GI,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SH+HA,cAAA,ICjEA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBD6DV,sCAAA,oCE7GI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBD0EV,cAAA,iBAEE,YAAA,EAAA,IAAA,EAAA,sBAIF,gBEhII,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SHkJA,cAAA,IAHF,sCAAA,oCEhII,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBDgFV,8BAAA,iCAYI,YAAA,EAAA,KAAA,EAAA,gBAKJ,qBAAA,kBAAA,mBAGE,cAAA,EAqBF,yBAfI,mDAAA,yDAAA,yDAGE,MAAA,KE7JF,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,UFqKJ,OACE,YAAA,EAAA,IAAA,EAAA,qBC3HA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBDsIV,eEtLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAKF,YEvLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAMF,eExLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAOF,cEzLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAeF,UEjMI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFuMJ,cE3MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFwMJ,sBE5MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyMJ,mBE7MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0MJ,sBE9MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2MJ,qBE/MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF+MJ,sBElLI,iBAAA,yKACA,iBAAA,oKACA,iBAAA,iKFyLJ,YACE,cAAA,IC9KA,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBDgLV,wBAAA,8BAAA,8BAGE,YAAA,EAAA,KAAA,EAAA,QEnOE,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFiOF,aAAA,QALF,+BAAA,qCAAA,qCAQI,YAAA,KAUJ,OCnME,mBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,EAAA,IAAA,IAAA,gBD4MV,8BE5PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyPJ,8BE7PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0PJ,8BE9PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2PJ,2BE/PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF4PJ,8BEhQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF6PJ,6BEjQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFoQJ,MExQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFsQF,aAAA,QC3NA,mBAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA,qBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA"}
--------------------------------------------------------------------------------
/lib/bootstrap/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sylvainar/ROS-OSM-map-integration/576b48c79f9cb031e740b0419f8ed5943dfc1114/lib/bootstrap/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sylvainar/ROS-OSM-map-integration/576b48c79f9cb031e740b0419f8ed5943dfc1114/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/lib/bootstrap/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sylvainar/ROS-OSM-map-integration/576b48c79f9cb031e740b0419f8ed5943dfc1114/lib/bootstrap/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sylvainar/ROS-OSM-map-integration/576b48c79f9cb031e740b0419f8ed5943dfc1114/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/lib/bootstrap/js/bootstrap-datepicker.js:
--------------------------------------------------------------------------------
1 | /* =========================================================
2 | * bootstrap-datepicker.js
3 | * http://www.eyecon.ro/bootstrap-datepicker
4 | * =========================================================
5 | * Copyright 2012 Stefan Petre
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ========================================================= */
19 |
20 | !function( $ ) {
21 |
22 | // Picker object
23 |
24 | var Datepicker = function(element, options){
25 | this.element = $(element);
26 | this.format = DPGlobal.parseFormat(options.format||this.element.data('date-format')||'mm/dd/yyyy');
27 | this.picker = $(DPGlobal.template)
28 | .appendTo('body')
29 | .on({
30 | click: $.proxy(this.click, this)//,
31 | //mousedown: $.proxy(this.mousedown, this)
32 | });
33 | this.isInput = this.element.is('input');
34 | this.component = this.element.is('.date') ? this.element.find('.add-on') : false;
35 |
36 | if (this.isInput) {
37 | this.element.on({
38 | focus: $.proxy(this.show, this),
39 | //blur: $.proxy(this.hide, this),
40 | keyup: $.proxy(this.update, this)
41 | });
42 | } else {
43 | if (this.component){
44 | this.component.on('click', $.proxy(this.show, this));
45 | } else {
46 | this.element.on('click', $.proxy(this.show, this));
47 | }
48 | }
49 |
50 | this.minViewMode = options.minViewMode||this.element.data('date-minviewmode')||0;
51 | if (typeof this.minViewMode === 'string') {
52 | switch (this.minViewMode) {
53 | case 'months':
54 | this.minViewMode = 1;
55 | break;
56 | case 'years':
57 | this.minViewMode = 2;
58 | break;
59 | default:
60 | this.minViewMode = 0;
61 | break;
62 | }
63 | }
64 | this.viewMode = options.viewMode||this.element.data('date-viewmode')||0;
65 | if (typeof this.viewMode === 'string') {
66 | switch (this.viewMode) {
67 | case 'months':
68 | this.viewMode = 1;
69 | break;
70 | case 'years':
71 | this.viewMode = 2;
72 | break;
73 | default:
74 | this.viewMode = 0;
75 | break;
76 | }
77 | }
78 | this.startViewMode = this.viewMode;
79 | this.weekStart = options.weekStart||this.element.data('date-weekstart')||0;
80 | this.weekEnd = this.weekStart === 0 ? 6 : this.weekStart - 1;
81 | this.onRender = options.onRender;
82 | this.fillDow();
83 | this.fillMonths();
84 | this.update();
85 | this.showMode();
86 | };
87 |
88 | Datepicker.prototype = {
89 | constructor: Datepicker,
90 |
91 | show: function(e) {
92 | this.picker.show();
93 | this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();
94 | this.place();
95 | $(window).on('resize', $.proxy(this.place, this));
96 | if (e ) {
97 | e.stopPropagation();
98 | e.preventDefault();
99 | }
100 | if (!this.isInput) {
101 | }
102 | var that = this;
103 | $(document).on('mousedown', function(ev){
104 | if ($(ev.target).closest('.datepicker').length == 0) {
105 | that.hide();
106 | }
107 | });
108 | this.element.trigger({
109 | type: 'show',
110 | date: this.date
111 | });
112 | },
113 |
114 | hide: function(){
115 | this.picker.hide();
116 | $(window).off('resize', this.place);
117 | this.viewMode = this.startViewMode;
118 | this.showMode();
119 | if (!this.isInput) {
120 | $(document).off('mousedown', this.hide);
121 | }
122 | //this.set();
123 | this.element.trigger({
124 | type: 'hide',
125 | date: this.date
126 | });
127 | },
128 |
129 | set: function() {
130 | var formated = DPGlobal.formatDate(this.date, this.format);
131 | if (!this.isInput) {
132 | if (this.component){
133 | this.element.find('input').prop('value', formated);
134 | }
135 | this.element.data('date', formated);
136 | } else {
137 | this.element.prop('value', formated);
138 | }
139 | },
140 |
141 | setValue: function(newDate) {
142 | if (typeof newDate === 'string') {
143 | this.date = DPGlobal.parseDate(newDate, this.format);
144 | } else {
145 | this.date = new Date(newDate);
146 | }
147 | this.set();
148 | this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0);
149 | this.fill();
150 | },
151 |
152 | place: function(){
153 | var offset = this.component ? this.component.offset() : this.element.offset();
154 | this.picker.css({
155 | top: offset.top + this.height,
156 | left: offset.left
157 | });
158 | },
159 |
160 | update: function(newDate){
161 | this.date = DPGlobal.parseDate(
162 | typeof newDate === 'string' ? newDate : (this.isInput ? this.element.prop('value') : this.element.data('date')),
163 | this.format
164 | );
165 | this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0);
166 | this.fill();
167 | },
168 |
169 | fillDow: function(){
170 | var dowCnt = this.weekStart;
171 | var html = '';
172 | while (dowCnt < this.weekStart + 7) {
173 | html += ''+DPGlobal.dates.daysMin[(dowCnt++)%7]+' ';
174 | }
175 | html += ' ';
176 | this.picker.find('.datepicker-days thead').append(html);
177 | },
178 |
179 | fillMonths: function(){
180 | var html = '';
181 | var i = 0
182 | while (i < 12) {
183 | html += ''+DPGlobal.dates.monthsShort[i++]+' ';
184 | }
185 | this.picker.find('.datepicker-months td').append(html);
186 | },
187 |
188 | fill: function() {
189 | var d = new Date(this.viewDate),
190 | year = d.getFullYear(),
191 | month = d.getMonth(),
192 | currentDate = this.date.valueOf();
193 | this.picker.find('.datepicker-days th:eq(1)')
194 | .text(DPGlobal.dates.months[month]+' '+year);
195 | var prevMonth = new Date(year, month-1, 28,0,0,0,0),
196 | day = DPGlobal.getDaysInMonth(prevMonth.getFullYear(), prevMonth.getMonth());
197 | prevMonth.setDate(day);
198 | prevMonth.setDate(day - (prevMonth.getDay() - this.weekStart + 7)%7);
199 | var nextMonth = new Date(prevMonth);
200 | nextMonth.setDate(nextMonth.getDate() + 42);
201 | nextMonth = nextMonth.valueOf();
202 | var html = [];
203 | var clsName,
204 | prevY,
205 | prevM;
206 | while(prevMonth.valueOf() < nextMonth) {
207 | if (prevMonth.getDay() === this.weekStart) {
208 | html.push('');
209 | }
210 | clsName = this.onRender(prevMonth);
211 | prevY = prevMonth.getFullYear();
212 | prevM = prevMonth.getMonth();
213 | if ((prevM < month && prevY === year) || prevY < year) {
214 | clsName += ' old';
215 | } else if ((prevM > month && prevY === year) || prevY > year) {
216 | clsName += ' new';
217 | }
218 | if (prevMonth.valueOf() === currentDate) {
219 | clsName += ' active';
220 | }
221 | html.push(''+prevMonth.getDate() + ' ');
222 | if (prevMonth.getDay() === this.weekEnd) {
223 | html.push(' ');
224 | }
225 | prevMonth.setDate(prevMonth.getDate()+1);
226 | }
227 | this.picker.find('.datepicker-days tbody').empty().append(html.join(''));
228 | var currentYear = this.date.getFullYear();
229 |
230 | var months = this.picker.find('.datepicker-months')
231 | .find('th:eq(1)')
232 | .text(year)
233 | .end()
234 | .find('span').removeClass('active');
235 | if (currentYear === year) {
236 | months.eq(this.date.getMonth()).addClass('active');
237 | }
238 |
239 | html = '';
240 | year = parseInt(year/10, 10) * 10;
241 | var yearCont = this.picker.find('.datepicker-years')
242 | .find('th:eq(1)')
243 | .text(year + '-' + (year + 9))
244 | .end()
245 | .find('td');
246 | year -= 1;
247 | for (var i = -1; i < 11; i++) {
248 | html += ''+year+' ';
249 | year += 1;
250 | }
251 | yearCont.html(html);
252 | },
253 |
254 | click: function(e) {
255 | e.stopPropagation();
256 | e.preventDefault();
257 | var target = $(e.target).closest('span, td, th');
258 | if (target.length === 1) {
259 | switch(target[0].nodeName.toLowerCase()) {
260 | case 'th':
261 | switch(target[0].className) {
262 | case 'switch':
263 | this.showMode(1);
264 | break;
265 | case 'prev':
266 | case 'next':
267 | this.viewDate['set'+DPGlobal.modes[this.viewMode].navFnc].call(
268 | this.viewDate,
269 | this.viewDate['get'+DPGlobal.modes[this.viewMode].navFnc].call(this.viewDate) +
270 | DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1)
271 | );
272 | this.fill();
273 | this.set();
274 | break;
275 | }
276 | break;
277 | case 'span':
278 | if (target.is('.month')) {
279 | var month = target.parent().find('span').index(target);
280 | this.viewDate.setMonth(month);
281 | } else {
282 | var year = parseInt(target.text(), 10)||0;
283 | this.viewDate.setFullYear(year);
284 | }
285 | if (this.viewMode !== 0) {
286 | this.date = new Date(this.viewDate);
287 | this.element.trigger({
288 | type: 'changeDate',
289 | date: this.date,
290 | viewMode: DPGlobal.modes[this.viewMode].clsName
291 | });
292 | }
293 | this.showMode(-1);
294 | this.fill();
295 | this.set();
296 | break;
297 | case 'td':
298 | if (target.is('.day') && !target.is('.disabled')){
299 | var day = parseInt(target.text(), 10)||1;
300 | var month = this.viewDate.getMonth();
301 | if (target.is('.old')) {
302 | month -= 1;
303 | } else if (target.is('.new')) {
304 | month += 1;
305 | }
306 | var year = this.viewDate.getFullYear();
307 | this.date = new Date(year, month, day,0,0,0,0);
308 | this.viewDate = new Date(year, month, Math.min(28, day),0,0,0,0);
309 | this.fill();
310 | this.set();
311 | this.element.trigger({
312 | type: 'changeDate',
313 | date: this.date,
314 | viewMode: DPGlobal.modes[this.viewMode].clsName
315 | });
316 | }
317 | break;
318 | }
319 | }
320 | },
321 |
322 | mousedown: function(e){
323 | e.stopPropagation();
324 | e.preventDefault();
325 | },
326 |
327 | showMode: function(dir) {
328 | if (dir) {
329 | this.viewMode = Math.max(this.minViewMode, Math.min(2, this.viewMode + dir));
330 | }
331 | this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show();
332 | }
333 | };
334 |
335 | $.fn.datepicker = function ( option, val ) {
336 | return this.each(function () {
337 | var $this = $(this),
338 | data = $this.data('datepicker'),
339 | options = typeof option === 'object' && option;
340 | if (!data) {
341 | $this.data('datepicker', (data = new Datepicker(this, $.extend({}, $.fn.datepicker.defaults,options))));
342 | }
343 | if (typeof option === 'string') data[option](val);
344 | });
345 | };
346 |
347 | $.fn.datepicker.defaults = {
348 | onRender: function(date) {
349 | return '';
350 | }
351 | };
352 | $.fn.datepicker.Constructor = Datepicker;
353 |
354 | var DPGlobal = {
355 | modes: [
356 | {
357 | clsName: 'days',
358 | navFnc: 'Month',
359 | navStep: 1
360 | },
361 | {
362 | clsName: 'months',
363 | navFnc: 'FullYear',
364 | navStep: 1
365 | },
366 | {
367 | clsName: 'years',
368 | navFnc: 'FullYear',
369 | navStep: 10
370 | }],
371 | dates:{
372 | days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
373 | daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
374 | daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
375 | months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
376 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
377 | },
378 | isLeapYear: function (year) {
379 | return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0))
380 | },
381 | getDaysInMonth: function (year, month) {
382 | return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]
383 | },
384 | parseFormat: function(format){
385 | var separator = format.match(/[.\/\-\s].*?/),
386 | parts = format.split(/\W+/);
387 | if (!separator || !parts || parts.length === 0){
388 | throw new Error("Invalid date format.");
389 | }
390 | return {separator: separator, parts: parts};
391 | },
392 | parseDate: function(date, format) {
393 | date = date + "";
394 | var parts = date.split(format.separator),
395 | date = new Date(),
396 | val;
397 | date.setHours(0);
398 | date.setMinutes(0);
399 | date.setSeconds(0);
400 | date.setMilliseconds(0);
401 | if (parts.length === format.parts.length) {
402 | var year = date.getFullYear(), day = date.getDate(), month = date.getMonth();
403 | for (var i=0, cnt = format.parts.length; i < cnt; i++) {
404 | val = parseInt(parts[i], 10)||1;
405 | switch(format.parts[i]) {
406 | case 'dd':
407 | case 'd':
408 | day = val;
409 | date.setDate(val);
410 | break;
411 | case 'mm':
412 | case 'm':
413 | month = val - 1;
414 | date.setMonth(val - 1);
415 | break;
416 | case 'yy':
417 | year = 2000 + val;
418 | date.setFullYear(2000 + val);
419 | break;
420 | case 'yyyy':
421 | year = val;
422 | date.setFullYear(val);
423 | break;
424 | }
425 | }
426 | date = new Date(year, month, day, 0 ,0 ,0);
427 | }
428 | return date;
429 | },
430 | formatDate: function(date, format){
431 | var val = {
432 | d: date.getDate(),
433 | m: date.getMonth() + 1,
434 | yy: date.getFullYear().toString().substring(2),
435 | yyyy: date.getFullYear()
436 | };
437 | val.dd = (val.d < 10 ? '0' : '') + val.d;
438 | val.mm = (val.m < 10 ? '0' : '') + val.m;
439 | var date = [];
440 | for (var i=0, cnt = format.parts.length; i < cnt; i++) {
441 | date.push(val[format.parts[i]]);
442 | }
443 | return date.join(format.separator);
444 | },
445 | headTemplate: ''+
446 | ''+
447 | '‹ '+
448 | ' '+
449 | '› '+
450 | ' '+
451 | ' ',
452 | contTemplate: ' '
453 | };
454 | DPGlobal.template = '';
474 |
475 | }( window.jQuery );
--------------------------------------------------------------------------------
/lib/bootstrap/js/bootstrap.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.6 (http://getbootstrap.com)
3 | * Copyright 2011-2015 Twitter, Inc.
4 | * Licensed under the MIT license
5 | */
6 | if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>2)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.6",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.6",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.6",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.6",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.6",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.6",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.6",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.6",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
--------------------------------------------------------------------------------
/lib/bootstrap/js/npm.js:
--------------------------------------------------------------------------------
1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
2 | require('../../js/transition.js')
3 | require('../../js/alert.js')
4 | require('../../js/button.js')
5 | require('../../js/carousel.js')
6 | require('../../js/collapse.js')
7 | require('../../js/dropdown.js')
8 | require('../../js/modal.js')
9 | require('../../js/tooltip.js')
10 | require('../../js/popover.js')
11 | require('../../js/scrollspy.js')
12 | require('../../js/tab.js')
13 | require('../../js/affix.js')
--------------------------------------------------------------------------------
/lib/easy-button/easy-button.css:
--------------------------------------------------------------------------------
1 | .leaflet-bar button,
2 | .leaflet-bar button:hover {
3 | background-color: #fff;
4 | border: none;
5 | border-bottom: 1px solid #ccc;
6 | /* width: 26px;
7 | height: 26px; */
8 | line-height: 26px;
9 | display: block;
10 | text-align: center;
11 | text-decoration: none;
12 | color: black;
13 | }
14 |
15 | .leaflet-bar button {
16 | background-position: 50% 50%;
17 | background-repeat: no-repeat;
18 | overflow: hidden;
19 | display: block;
20 | }
21 |
22 | .leaflet-bar button:hover {
23 | background-color: #f4f4f4;
24 | }
25 |
26 | .leaflet-bar button:first-of-type {
27 | border-top-left-radius: 4px;
28 | border-top-right-radius: 4px;
29 | }
30 |
31 | .leaflet-bar button:last-of-type {
32 | border-bottom-left-radius: 4px;
33 | border-bottom-right-radius: 4px;
34 | border-bottom: none;
35 | }
36 |
37 | .leaflet-bar.disabled,
38 | .leaflet-bar button.disabled {
39 | cursor: default;
40 | pointer-events: none;
41 | opacity: .4;
42 | }
43 |
44 | .easy-button-button .button-state{
45 | display: block;
46 | width: 100%;
47 | height: 100%;
48 | position: relative;
49 | }
50 |
51 |
52 | .leaflet-touch .leaflet-bar button {
53 | width: 30px;
54 | height: 30px;
55 | line-height: 30px;
56 | }
57 |
--------------------------------------------------------------------------------
/lib/easy-button/easy-button.js:
--------------------------------------------------------------------------------
1 | (function(){
2 |
3 | // This is for grouping buttons into a bar
4 | // takes an array of `L.easyButton`s and
5 | // then the usual `.addTo(map)`
6 | L.Control.EasyBar = L.Control.extend({
7 |
8 | options: {
9 | position: 'topleft', // part of leaflet's defaults
10 | id: null, // an id to tag the Bar with
11 | leafletClasses: true // use leaflet classes?
12 | },
13 |
14 |
15 | initialize: function(buttons, options){
16 |
17 | if(options){
18 | L.Util.setOptions( this, options );
19 | }
20 |
21 | this._buildContainer();
22 | this._buttons = [];
23 |
24 | for(var i = 0; i < buttons.length; i++){
25 | buttons[i]._bar = this;
26 | buttons[i]._container = buttons[i].button;
27 | this._buttons.push(buttons[i]);
28 | this.container.appendChild(buttons[i].button);
29 | }
30 |
31 | },
32 |
33 |
34 | _buildContainer: function(){
35 | this._container = this.container = L.DomUtil.create('div', '');
36 | this.options.leafletClasses && L.DomUtil.addClass(this.container, 'leaflet-bar easy-button-container leaflet-control');
37 | this.options.id && (this.container.id = this.options.id);
38 | },
39 |
40 |
41 | enable: function(){
42 | L.DomUtil.addClass(this.container, 'enabled');
43 | L.DomUtil.removeClass(this.container, 'disabled');
44 | this.container.setAttribute('aria-hidden', 'false');
45 | return this;
46 | },
47 |
48 |
49 | disable: function(){
50 | L.DomUtil.addClass(this.container, 'disabled');
51 | L.DomUtil.removeClass(this.container, 'enabled');
52 | this.container.setAttribute('aria-hidden', 'true');
53 | return this;
54 | },
55 |
56 |
57 | onAdd: function () {
58 | return this.container;
59 | },
60 |
61 | addTo: function (map) {
62 | this._map = map;
63 |
64 | for(var i = 0; i < this._buttons.length; i++){
65 | this._buttons[i]._map = map;
66 | }
67 |
68 | var container = this._container = this.onAdd(map),
69 | pos = this.getPosition(),
70 | corner = map._controlCorners[pos];
71 |
72 | L.DomUtil.addClass(container, 'leaflet-control');
73 |
74 | if (pos.indexOf('bottom') !== -1) {
75 | corner.insertBefore(container, corner.firstChild);
76 | } else {
77 | corner.appendChild(container);
78 | }
79 |
80 | return this;
81 | }
82 |
83 | });
84 |
85 | L.easyBar = function(){
86 | var args = [L.Control.EasyBar];
87 | for(var i = 0; i < arguments.length; i++){
88 | args.push( arguments[i] );
89 | }
90 | return new (Function.prototype.bind.apply(L.Control.EasyBar, args));
91 | };
92 |
93 | // L.EasyButton is the actual buttons
94 | // can be called without being grouped into a bar
95 | L.Control.EasyButton = L.Control.extend({
96 |
97 | options: {
98 | position: 'topleft', // part of leaflet's defaults
99 |
100 | id: null, // an id to tag the button with
101 |
102 | type: 'replace', // [(replace|animate)]
103 | // replace swaps out elements
104 | // animate changes classes with all elements inserted
105 |
106 | states: [], // state names look like this
107 | // {
108 | // stateName: 'untracked',
109 | // onClick: function(){ handle_nav_manually(); };
110 | // title: 'click to make inactive',
111 | // icon: 'fa-circle', // wrapped with
112 | // }
113 |
114 | leafletClasses: true // use leaflet styles for the button
115 | },
116 |
117 |
118 |
119 | initialize: function(icon, onClick, title, id){
120 |
121 | // clear the states manually
122 | this.options.states = [];
123 |
124 | // add id to options
125 | if(id != null){
126 | this.options.id = id;
127 | }
128 |
129 | // storage between state functions
130 | this.storage = {};
131 |
132 | // is the last item an object?
133 | if( typeof arguments[arguments.length-1] === 'object' ){
134 |
135 | // if so, it should be the options
136 | L.Util.setOptions( this, arguments[arguments.length-1] );
137 | }
138 |
139 | // if there aren't any states in options
140 | // use the early params
141 | if( this.options.states.length === 0 &&
142 | typeof icon === 'string' &&
143 | typeof onClick === 'function'){
144 |
145 | // turn the options object into a state
146 | this.options.states.push({
147 | icon: icon,
148 | onClick: onClick,
149 | title: typeof title === 'string' ? title : ''
150 | });
151 | }
152 |
153 | // curate and move user's states into
154 | // the _states for internal use
155 | this._states = [];
156 |
157 | for(var i = 0; i < this.options.states.length; i++){
158 | this._states.push( new State(this.options.states[i], this) );
159 | }
160 |
161 | this._buildButton();
162 |
163 | this._activateState(this._states[0]);
164 |
165 | },
166 |
167 | _buildButton: function(){
168 |
169 | this.button = L.DomUtil.create('button', '');
170 |
171 | if (this.options.id ){
172 | this.button.id = this.options.id;
173 | }
174 |
175 | if (this.options.leafletClasses){
176 | L.DomUtil.addClass(this.button, 'easy-button-button leaflet-bar-part');
177 | }
178 |
179 | // don't let double clicks get to the map
180 | L.DomEvent.addListener(this.button, 'dblclick', L.DomEvent.stop);
181 |
182 | // take care of normal clicks
183 | L.DomEvent.addListener(this.button,'click', function(e){
184 | L.DomEvent.stop(e);
185 | this._currentState.onClick(this, this._map ? this._map : null );
186 | this._map.getContainer().focus();
187 | }, this);
188 |
189 | // prep the contents of the control
190 | if(this.options.type == 'replace'){
191 | this.button.appendChild(this._currentState.icon);
192 | } else {
193 | for(var i=0;i"']/) ){
345 |
346 | // if so, the user should have put in html
347 | // so move forward as such
348 | tmpIcon = ambiguousIconString;
349 |
350 | // then it wasn't html, so
351 | // it's a class list, figure out what kind
352 | } else {
353 | ambiguousIconString = ambiguousIconString.replace(/(^\s*|\s*$)/g,'');
354 | tmpIcon = L.DomUtil.create('span', '');
355 |
356 | if( ambiguousIconString.indexOf('fa-') === 0 ){
357 | L.DomUtil.addClass(tmpIcon, 'fa ' + ambiguousIconString)
358 | } else if ( ambiguousIconString.indexOf('glyphicon-') === 0 ) {
359 | L.DomUtil.addClass(tmpIcon, 'glyphicon ' + ambiguousIconString)
360 | } else {
361 | L.DomUtil.addClass(tmpIcon, /*rollwithit*/ ambiguousIconString)
362 | }
363 |
364 | // make this a string so that it's easy to set innerHTML below
365 | tmpIcon = tmpIcon.outerHTML;
366 | }
367 |
368 | return tmpIcon;
369 | }
370 |
371 | })();
372 |
--------------------------------------------------------------------------------
/lib/leaflet/images/layers-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sylvainar/ROS-OSM-map-integration/576b48c79f9cb031e740b0419f8ed5943dfc1114/lib/leaflet/images/layers-2x.png
--------------------------------------------------------------------------------
/lib/leaflet/images/layers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sylvainar/ROS-OSM-map-integration/576b48c79f9cb031e740b0419f8ed5943dfc1114/lib/leaflet/images/layers.png
--------------------------------------------------------------------------------
/lib/leaflet/images/marker-icon-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sylvainar/ROS-OSM-map-integration/576b48c79f9cb031e740b0419f8ed5943dfc1114/lib/leaflet/images/marker-icon-2x.png
--------------------------------------------------------------------------------
/lib/leaflet/images/marker-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sylvainar/ROS-OSM-map-integration/576b48c79f9cb031e740b0419f8ed5943dfc1114/lib/leaflet/images/marker-icon.png
--------------------------------------------------------------------------------
/lib/leaflet/images/marker-shadow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sylvainar/ROS-OSM-map-integration/576b48c79f9cb031e740b0419f8ed5943dfc1114/lib/leaflet/images/marker-shadow.png
--------------------------------------------------------------------------------
/lib/leaflet/leaflet.css:
--------------------------------------------------------------------------------
1 | /* required styles */
2 |
3 | .leaflet-map-pane,
4 | .leaflet-tile,
5 | .leaflet-marker-icon,
6 | .leaflet-marker-shadow,
7 | .leaflet-tile-pane,
8 | .leaflet-tile-container,
9 | .leaflet-overlay-pane,
10 | .leaflet-shadow-pane,
11 | .leaflet-marker-pane,
12 | .leaflet-popup-pane,
13 | .leaflet-overlay-pane svg,
14 | .leaflet-zoom-box,
15 | .leaflet-image-layer,
16 | .leaflet-layer {
17 | position: absolute;
18 | left: 0;
19 | top: 0;
20 | }
21 | .leaflet-container {
22 | overflow: hidden;
23 | -ms-touch-action: none;
24 | touch-action: none;
25 | }
26 | .leaflet-tile,
27 | .leaflet-marker-icon,
28 | .leaflet-marker-shadow {
29 | -webkit-user-select: none;
30 | -moz-user-select: none;
31 | user-select: none;
32 | -webkit-user-drag: none;
33 | }
34 | .leaflet-marker-icon,
35 | .leaflet-marker-shadow {
36 | display: block;
37 | }
38 | /* map is broken in FF if you have max-width: 100% on tiles */
39 | .leaflet-container img {
40 | max-width: none !important;
41 | }
42 | /* stupid Android 2 doesn't understand "max-width: none" properly */
43 | .leaflet-container img.leaflet-image-layer {
44 | max-width: 15000px !important;
45 | }
46 | .leaflet-tile {
47 | filter: inherit;
48 | visibility: hidden;
49 | }
50 | .leaflet-tile-loaded {
51 | visibility: inherit;
52 | }
53 | .leaflet-zoom-box {
54 | width: 0;
55 | height: 0;
56 | }
57 | /* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
58 | .leaflet-overlay-pane svg {
59 | -moz-user-select: none;
60 | }
61 |
62 | .leaflet-tile-pane { z-index: 2; }
63 | .leaflet-objects-pane { z-index: 3; }
64 | .leaflet-overlay-pane { z-index: 4; }
65 | .leaflet-shadow-pane { z-index: 5; }
66 | .leaflet-marker-pane { z-index: 6; }
67 | .leaflet-popup-pane { z-index: 7; }
68 |
69 | .leaflet-vml-shape {
70 | width: 1px;
71 | height: 1px;
72 | }
73 | .lvml {
74 | behavior: url(#default#VML);
75 | display: inline-block;
76 | position: absolute;
77 | }
78 |
79 |
80 | /* control positioning */
81 |
82 | .leaflet-control {
83 | position: relative;
84 | z-index: 7;
85 | pointer-events: auto;
86 | }
87 | .leaflet-top,
88 | .leaflet-bottom {
89 | position: absolute;
90 | z-index: 1000;
91 | pointer-events: none;
92 | }
93 | .leaflet-top {
94 | top: 0;
95 | }
96 | .leaflet-right {
97 | right: 0;
98 | }
99 | .leaflet-bottom {
100 | bottom: 0;
101 | }
102 | .leaflet-left {
103 | left: 0;
104 | }
105 | .leaflet-control {
106 | float: left;
107 | clear: both;
108 | }
109 | .leaflet-right .leaflet-control {
110 | float: right;
111 | }
112 | .leaflet-top .leaflet-control {
113 | margin-top: 10px;
114 | }
115 | .leaflet-bottom .leaflet-control {
116 | margin-bottom: 10px;
117 | }
118 | .leaflet-left .leaflet-control {
119 | margin-left: 10px;
120 | }
121 | .leaflet-right .leaflet-control {
122 | margin-right: 10px;
123 | }
124 |
125 |
126 | /* zoom and fade animations */
127 |
128 | .leaflet-fade-anim .leaflet-tile,
129 | .leaflet-fade-anim .leaflet-popup {
130 | opacity: 0;
131 | -webkit-transition: opacity 0.2s linear;
132 | -moz-transition: opacity 0.2s linear;
133 | -o-transition: opacity 0.2s linear;
134 | transition: opacity 0.2s linear;
135 | }
136 | .leaflet-fade-anim .leaflet-tile-loaded,
137 | .leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
138 | opacity: 1;
139 | }
140 |
141 | .leaflet-zoom-anim .leaflet-zoom-animated {
142 | -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
143 | -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
144 | -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1);
145 | transition: transform 0.25s cubic-bezier(0,0,0.25,1);
146 | }
147 | .leaflet-zoom-anim .leaflet-tile,
148 | .leaflet-pan-anim .leaflet-tile,
149 | .leaflet-touching .leaflet-zoom-animated {
150 | -webkit-transition: none;
151 | -moz-transition: none;
152 | -o-transition: none;
153 | transition: none;
154 | }
155 |
156 | .leaflet-zoom-anim .leaflet-zoom-hide {
157 | visibility: hidden;
158 | }
159 |
160 |
161 | /* cursors */
162 |
163 | .leaflet-clickable {
164 | cursor: pointer;
165 | }
166 | .leaflet-container {
167 | cursor: -webkit-grab;
168 | cursor: -moz-grab;
169 | }
170 | .leaflet-popup-pane,
171 | .leaflet-control {
172 | cursor: auto;
173 | }
174 | .leaflet-dragging .leaflet-container,
175 | .leaflet-dragging .leaflet-clickable {
176 | cursor: move;
177 | cursor: -webkit-grabbing;
178 | cursor: -moz-grabbing;
179 | }
180 |
181 |
182 | /* visual tweaks */
183 |
184 | .leaflet-container {
185 | background: #ddd;
186 | outline: 0;
187 | }
188 | .leaflet-container a {
189 | color: #0078A8;
190 | }
191 | .leaflet-container a.leaflet-active {
192 | outline: 2px solid orange;
193 | }
194 | .leaflet-zoom-box {
195 | border: 2px dotted #38f;
196 | background: rgba(255,255,255,0.5);
197 | }
198 |
199 |
200 | /* general typography */
201 | .leaflet-container {
202 | font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
203 | }
204 |
205 |
206 | /* general toolbar styles */
207 |
208 | .leaflet-bar {
209 | box-shadow: 0 1px 5px rgba(0,0,0,0.65);
210 | border-radius: 4px;
211 | }
212 | .leaflet-bar a,
213 | .leaflet-bar a:hover {
214 | background-color: #fff;
215 | border-bottom: 1px solid #ccc;
216 | /*width: 26px;
217 | height: 26px;*/
218 | line-height: 26px;
219 | display: block;
220 | text-align: center;
221 | text-decoration: none;
222 | color: black;
223 | }
224 | .leaflet-bar a,
225 | .leaflet-control-layers-toggle {
226 | background-position: 50% 50%;
227 | background-repeat: no-repeat;
228 | display: block;
229 | }
230 | .leaflet-bar a:hover {
231 | background-color: #f4f4f4;
232 | }
233 | .leaflet-bar a:first-child {
234 | border-top-left-radius: 4px;
235 | border-top-right-radius: 4px;
236 | }
237 | .leaflet-bar a:last-child {
238 | border-bottom-left-radius: 4px;
239 | border-bottom-right-radius: 4px;
240 | border-bottom: none;
241 | }
242 | .leaflet-bar a.leaflet-disabled {
243 | cursor: default;
244 | background-color: #f4f4f4;
245 | color: #bbb;
246 | }
247 |
248 | .leaflet-touch .leaflet-bar a {
249 | width: 30px;
250 | height: 30px;
251 | line-height: 30px;
252 | }
253 |
254 |
255 | /* zoom control */
256 |
257 | .leaflet-control-zoom-in,
258 | .leaflet-control-zoom-out {
259 | font: bold 18px 'Lucida Console', Monaco, monospace;
260 | text-indent: 1px;
261 | }
262 | .leaflet-control-zoom-out {
263 | font-size: 20px;
264 | }
265 |
266 | .leaflet-touch .leaflet-control-zoom-in {
267 | font-size: 22px;
268 | }
269 | .leaflet-touch .leaflet-control-zoom-out {
270 | font-size: 24px;
271 | }
272 |
273 |
274 | /* layers control */
275 |
276 | .leaflet-control-layers {
277 | box-shadow: 0 1px 5px rgba(0,0,0,0.4);
278 | background: #fff;
279 | border-radius: 5px;
280 | }
281 | .leaflet-control-layers-toggle {
282 | background-image: url(images/layers.png);
283 | width: 36px;
284 | height: 36px;
285 | }
286 | .leaflet-retina .leaflet-control-layers-toggle {
287 | background-image: url(images/layers-2x.png);
288 | background-size: 26px 26px;
289 | }
290 | .leaflet-touch .leaflet-control-layers-toggle {
291 | width: 44px;
292 | height: 44px;
293 | }
294 | .leaflet-control-layers .leaflet-control-layers-list,
295 | .leaflet-control-layers-expanded .leaflet-control-layers-toggle {
296 | display: none;
297 | }
298 | .leaflet-control-layers-expanded .leaflet-control-layers-list {
299 | display: block;
300 | position: relative;
301 | }
302 | .leaflet-control-layers-expanded {
303 | padding: 6px 10px 6px 6px;
304 | color: #333;
305 | background: #fff;
306 | }
307 | .leaflet-control-layers-selector {
308 | margin-top: 2px;
309 | position: relative;
310 | top: 1px;
311 | }
312 | .leaflet-control-layers label {
313 | display: block;
314 | }
315 | .leaflet-control-layers-separator {
316 | height: 0;
317 | border-top: 1px solid #ddd;
318 | margin: 5px -10px 5px -6px;
319 | }
320 |
321 |
322 | /* attribution and scale controls */
323 |
324 | .leaflet-container .leaflet-control-attribution {
325 | background: #fff;
326 | background: rgba(255, 255, 255, 0.7);
327 | margin: 0;
328 | }
329 | .leaflet-control-attribution,
330 | .leaflet-control-scale-line {
331 | padding: 0 5px;
332 | color: #333;
333 | }
334 | .leaflet-control-attribution a {
335 | text-decoration: none;
336 | }
337 | .leaflet-control-attribution a:hover {
338 | text-decoration: underline;
339 | }
340 | .leaflet-container .leaflet-control-attribution,
341 | .leaflet-container .leaflet-control-scale {
342 | font-size: 11px;
343 | }
344 | .leaflet-left .leaflet-control-scale {
345 | margin-left: 5px;
346 | }
347 | .leaflet-bottom .leaflet-control-scale {
348 | margin-bottom: 5px;
349 | }
350 | .leaflet-control-scale-line {
351 | border: 2px solid #777;
352 | border-top: none;
353 | line-height: 1.1;
354 | padding: 2px 5px 1px;
355 | font-size: 11px;
356 | white-space: nowrap;
357 | overflow: hidden;
358 | -moz-box-sizing: content-box;
359 | box-sizing: content-box;
360 |
361 | background: #fff;
362 | background: rgba(255, 255, 255, 0.5);
363 | }
364 | .leaflet-control-scale-line:not(:first-child) {
365 | border-top: 2px solid #777;
366 | border-bottom: none;
367 | margin-top: -2px;
368 | }
369 | .leaflet-control-scale-line:not(:first-child):not(:last-child) {
370 | border-bottom: 2px solid #777;
371 | }
372 |
373 | .leaflet-touch .leaflet-control-attribution,
374 | .leaflet-touch .leaflet-control-layers,
375 | .leaflet-touch .leaflet-bar {
376 | box-shadow: none;
377 | }
378 | .leaflet-touch .leaflet-control-layers,
379 | .leaflet-touch .leaflet-bar {
380 | border: 2px solid rgba(0,0,0,0.2);
381 | background-clip: padding-box;
382 | }
383 |
384 |
385 | /* popup */
386 |
387 | .leaflet-popup {
388 | position: absolute;
389 | text-align: center;
390 | }
391 | .leaflet-popup-content-wrapper {
392 | padding: 1px;
393 | text-align: left;
394 | border-radius: 12px;
395 | }
396 | .leaflet-popup-content {
397 | margin: 13px 19px;
398 | line-height: 1.4;
399 | }
400 | .leaflet-popup-content p {
401 | margin: 18px 0;
402 | }
403 | .leaflet-popup-tip-container {
404 | margin: 0 auto;
405 | width: 40px;
406 | height: 20px;
407 | position: relative;
408 | overflow: hidden;
409 | }
410 | .leaflet-popup-tip {
411 | width: 17px;
412 | height: 17px;
413 | padding: 1px;
414 |
415 | margin: -10px auto 0;
416 |
417 | -webkit-transform: rotate(45deg);
418 | -moz-transform: rotate(45deg);
419 | -ms-transform: rotate(45deg);
420 | -o-transform: rotate(45deg);
421 | transform: rotate(45deg);
422 | }
423 | .leaflet-popup-content-wrapper,
424 | .leaflet-popup-tip {
425 | background: white;
426 |
427 | box-shadow: 0 3px 14px rgba(0,0,0,0.4);
428 | }
429 | .leaflet-container a.leaflet-popup-close-button {
430 | position: absolute;
431 | top: 0;
432 | right: 0;
433 | padding: 4px 4px 0 0;
434 | text-align: center;
435 | width: 18px;
436 | height: 14px;
437 | font: 16px/14px Tahoma, Verdana, sans-serif;
438 | color: #c3c3c3;
439 | text-decoration: none;
440 | font-weight: bold;
441 | background: transparent;
442 | }
443 | .leaflet-container a.leaflet-popup-close-button:hover {
444 | color: #999;
445 | }
446 | .leaflet-popup-scrolled {
447 | overflow: auto;
448 | border-bottom: 1px solid #ddd;
449 | border-top: 1px solid #ddd;
450 | }
451 |
452 | .leaflet-oldie .leaflet-popup-content-wrapper {
453 | zoom: 1;
454 | }
455 | .leaflet-oldie .leaflet-popup-tip {
456 | width: 24px;
457 | margin: 0 auto;
458 |
459 | -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
460 | filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
461 | }
462 | .leaflet-oldie .leaflet-popup-tip-container {
463 | margin-top: -1px;
464 | }
465 |
466 | .leaflet-oldie .leaflet-control-zoom,
467 | .leaflet-oldie .leaflet-control-layers,
468 | .leaflet-oldie .leaflet-popup-content-wrapper,
469 | .leaflet-oldie .leaflet-popup-tip {
470 | border: 1px solid #999;
471 | }
472 |
473 |
474 | /* div icon */
475 |
476 | .leaflet-div-icon {
477 | background: #fff;
478 | border: 1px solid #666;
479 | }
480 |
--------------------------------------------------------------------------------
/lib/roslib/eventemitter2.min.js:
--------------------------------------------------------------------------------
1 | !function(e){function r(){this._events={};if(this._conf){i.call(this,this._conf)}}function i(e){if(e){this._conf=e;e.delimiter&&(this.delimiter=e.delimiter);e.maxListeners&&(this._events.maxListeners=e.maxListeners);e.wildcard&&(this.wildcard=e.wildcard);e.newListener&&(this.newListener=e.newListener);if(this.wildcard){this.listenerTree={}}}}function s(e){this._events={};this.newListener=false;i.call(this,e)}function o(e,t,n,r){if(!n){return[]}var i=[],s,u,a,f,l,c,h,p=t.length,d=t[r],v=t[r+1];if(r===p&&n._listeners){if(typeof n._listeners==="function"){e&&e.push(n._listeners);return[n]}else{for(s=0,u=n._listeners.length;s0&&o._listeners.length>a){o._listeners.warned=true;console.error("(node) warning: possible EventEmitter memory "+"leak detected. %d listeners added. "+"Use emitter.setMaxListeners() to increase limit.",o._listeners.length);console.trace()}}}return true}u=e.shift()}return true}var t=Array.isArray?Array.isArray:function(t){return Object.prototype.toString.call(t)==="[object Array]"};var n=10;s.prototype.delimiter=".";s.prototype.setMaxListeners=function(e){this._events||r.call(this);this._events.maxListeners=e;if(!this._conf)this._conf={};this._conf.maxListeners=e};s.prototype.event="";s.prototype.once=function(e,t){this.many(e,1,t);return this};s.prototype.many=function(e,t,n){function i(){if(--t===0){r.off(e,i)}n.apply(this,arguments)}var r=this;if(typeof n!=="function"){throw new Error("many only accepts instances of Function")}i._origin=n;this.on(e,i);return r};s.prototype.emit=function(){this._events||r.call(this);var e=arguments[0];if(e==="newListener"&&!this.newListener){if(!this._events.newListener){return false}}if(this._all){var t=arguments.length;var n=new Array(t-1);for(var i=1;i1)switch(arguments.length){case 2:s.call(this,arguments[1]);break;case 3:s.call(this,arguments[1],arguments[2]);break;default:var t=arguments.length;var n=new Array(t-1);for(var i=1;i0||!!this._all}else{return!!this._all}};s.prototype.on=function(e,i){if(typeof e==="function"){this.onAny(e);return this}if(typeof i!=="function"){throw new Error("on only accepts instances of Function")}this._events||r.call(this);this.emit("newListener",e,i);if(this.wildcard){u.call(this,e,i);return this}if(!this._events[e]){this._events[e]=i}else if(typeof this._events[e]==="function"){this._events[e]=[this._events[e],i]}else if(t(this._events[e])){this._events[e].push(i);if(!this._events[e].warned){var s=n;if(typeof this._events.maxListeners!=="undefined"){s=this._events.maxListeners}if(s>0&&this._events[e].length>s){this._events[e].warned=true;console.error("(node) warning: possible EventEmitter memory "+"leak detected. %d listeners added. "+"Use emitter.setMaxListeners() to increase limit.",this._events[e].length);console.trace()}}}return this};s.prototype.onAny=function(e){if(typeof e!=="function"){throw new Error("onAny only accepts instances of Function")}if(!this._all){this._all=[]}this._all.push(e);return this};s.prototype.addListener=s.prototype.on;s.prototype.off=function(e,n){if(typeof n!=="function"){throw new Error("removeListener only takes instances of Function")}var r,i=[];if(this.wildcard){var s=typeof e==="string"?e.split(this.delimiter):e.slice();i=o.call(this,null,s,this.listenerTree,0)}else{if(!this._events[e])return this;r=this._events[e];i.push({_listeners:r})}for(var u=0;u0){r=this._all;for(t=0,n=r.length;tb.secs?!1:a.secs0&&(this.minval=parseFloat(b[0].getAttribute("lower")),this.maxval=parseFloat(b[0].getAttribute("upper")))}b.exports=d},{}],29:[function(a,b,c){function d(a){this.name=a.xml.getAttribute("name"),this.visuals=[];for(var b=a.xml.getElementsByTagName("visual"),c=0;c0&&(this.textureFilename=b[0].getAttribute("filename"));var c=a.xml.getElementsByTagName("color");c.length>0&&(this.color=new e({xml:c[0]}))}var e=a("./UrdfColor");d.prototype.isLink=function(){return null===this.color&&null===this.textureFilename};var f=a("object-assign");d.prototype.assign=function(a){return f(this,a)},b.exports=d},{"./UrdfColor":26,"object-assign":1}],31:[function(a,b,c){function d(a){this.scale=null,this.type=f.URDF_MESH,this.filename=a.xml.getAttribute("filename");var b=a.xml.getAttribute("scale");if(b){var c=b.split(" ");this.scale=new e({x:parseFloat(c[0]),y:parseFloat(c[1]),z:parseFloat(c[2])})}}var e=a("../math/Vector3"),f=a("./UrdfTypes");b.exports=d},{"../math/Vector3":20,"./UrdfTypes":34}],32:[function(a,b,c){function d(a){a=a||{};var b=a.xml,c=a.string;if(this.materials={},this.links={},this.joints={},c){var d=new h;b=d.parseFromString(c,"text/xml")}var i=b.documentElement;this.name=i.getAttribute("name");for(var j=i.childNodes,k=0;k0){for(var A=z[0],B=null,C=0;C0&&(this.material=new j({xml:F[0]}))}var e=a("../math/Pose"),f=a("../math/Vector3"),g=a("../math/Quaternion"),h=a("./UrdfCylinder"),i=a("./UrdfBox"),j=a("./UrdfMaterial"),k=a("./UrdfMesh"),l=a("./UrdfSphere");b.exports=d},{"../math/Pose":17,"../math/Quaternion":18,"../math/Vector3":20,"./UrdfBox":25,"./UrdfCylinder":27,"./UrdfMaterial":30,"./UrdfMesh":31,"./UrdfSphere":33}],36:[function(a,b,c){b.exports=a("object-assign")({UrdfBox:a("./UrdfBox"),UrdfColor:a("./UrdfColor"),UrdfCylinder:a("./UrdfCylinder"),UrdfLink:a("./UrdfLink"),UrdfMaterial:a("./UrdfMaterial"),UrdfMesh:a("./UrdfMesh"),UrdfModel:a("./UrdfModel"),UrdfSphere:a("./UrdfSphere"),UrdfVisual:a("./UrdfVisual")},a("./UrdfTypes"))},{"./UrdfBox":25,"./UrdfColor":26,"./UrdfCylinder":27,"./UrdfLink":29,"./UrdfMaterial":30,"./UrdfMesh":31,"./UrdfModel":32,"./UrdfSphere":33,"./UrdfTypes":34,"./UrdfVisual":35,"object-assign":1}],37:[function(a,b,c){(function(a){b.exports={EventEmitter2:a.EventEmitter2}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],38:[function(a,b,c){(function(a){b.exports=a.WebSocket}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],39:[function(a,b,c){b.exports=function(){return document.createElement("canvas")}},{}],40:[function(a,b,c){(function(c){"use strict";function d(a,b){var c=new f;c.onload=function(){var a=new e,d=a.getContext("2d");a.width=c.width,a.height=c.height,d.imageSmoothingEnabled=!1,d.webkitImageSmoothingEnabled=!1,d.mozImageSmoothingEnabled=!1,d.drawImage(c,0,0);for(var f=d.getImageData(0,0,c.width,c.height).data,g="",h=0;h
752 | * Licensed under MIT
753 | */
754 | .la-ball-fall,
755 | .la-ball-fall > div {
756 | position: relative;
757 | -webkit-box-sizing: border-box;
758 | -moz-box-sizing: border-box;
759 | box-sizing: border-box; }
760 |
761 | .la-ball-fall {
762 | display: block;
763 | font-size: 0;
764 | color: #fff; }
765 |
766 | .la-ball-fall.la-dark {
767 | color: #333; }
768 |
769 | .la-ball-fall > div {
770 | display: inline-block;
771 | float: none;
772 | background-color: currentColor;
773 | border: 0 solid currentColor; }
774 |
775 | .la-ball-fall {
776 | width: 54px;
777 | height: 18px; }
778 |
779 | .la-ball-fall > div {
780 | width: 10px;
781 | height: 10px;
782 | margin: 4px;
783 | border-radius: 100%;
784 | opacity: 0;
785 | -webkit-animation: ball-fall 1s ease-in-out infinite;
786 | -moz-animation: ball-fall 1s ease-in-out infinite;
787 | -o-animation: ball-fall 1s ease-in-out infinite;
788 | animation: ball-fall 1s ease-in-out infinite; }
789 |
790 | .la-ball-fall > div:nth-child(1) {
791 | -webkit-animation-delay: -200ms;
792 | -moz-animation-delay: -200ms;
793 | -o-animation-delay: -200ms;
794 | animation-delay: -200ms; }
795 |
796 | .la-ball-fall > div:nth-child(2) {
797 | -webkit-animation-delay: -100ms;
798 | -moz-animation-delay: -100ms;
799 | -o-animation-delay: -100ms;
800 | animation-delay: -100ms; }
801 |
802 | .la-ball-fall > div:nth-child(3) {
803 | -webkit-animation-delay: 0ms;
804 | -moz-animation-delay: 0ms;
805 | -o-animation-delay: 0ms;
806 | animation-delay: 0ms; }
807 |
808 | .la-ball-fall.la-sm {
809 | width: 26px;
810 | height: 8px; }
811 |
812 | .la-ball-fall.la-sm > div {
813 | width: 4px;
814 | height: 4px;
815 | margin: 2px; }
816 |
817 | .la-ball-fall.la-2x {
818 | width: 108px;
819 | height: 36px; }
820 |
821 | .la-ball-fall.la-2x > div {
822 | width: 20px;
823 | height: 20px;
824 | margin: 8px; }
825 |
826 | .la-ball-fall.la-3x {
827 | width: 162px;
828 | height: 54px; }
829 |
830 | .la-ball-fall.la-3x > div {
831 | width: 30px;
832 | height: 30px;
833 | margin: 12px; }
834 |
835 | /*
836 | * Animation
837 | */
838 | @-webkit-keyframes ball-fall {
839 | 0% {
840 | opacity: 0;
841 | -webkit-transform: translateY(-145%);
842 | transform: translateY(-145%); }
843 | 10% {
844 | opacity: .5; }
845 | 20% {
846 | opacity: 1;
847 | -webkit-transform: translateY(0);
848 | transform: translateY(0); }
849 | 80% {
850 | opacity: 1;
851 | -webkit-transform: translateY(0);
852 | transform: translateY(0); }
853 | 90% {
854 | opacity: .5; }
855 | 100% {
856 | opacity: 0;
857 | -webkit-transform: translateY(145%);
858 | transform: translateY(145%); } }
859 |
860 | @-moz-keyframes ball-fall {
861 | 0% {
862 | opacity: 0;
863 | -moz-transform: translateY(-145%);
864 | transform: translateY(-145%); }
865 | 10% {
866 | opacity: .5; }
867 | 20% {
868 | opacity: 1;
869 | -moz-transform: translateY(0);
870 | transform: translateY(0); }
871 | 80% {
872 | opacity: 1;
873 | -moz-transform: translateY(0);
874 | transform: translateY(0); }
875 | 90% {
876 | opacity: .5; }
877 | 100% {
878 | opacity: 0;
879 | -moz-transform: translateY(145%);
880 | transform: translateY(145%); } }
881 |
882 | @-o-keyframes ball-fall {
883 | 0% {
884 | opacity: 0;
885 | -o-transform: translateY(-145%);
886 | transform: translateY(-145%); }
887 | 10% {
888 | opacity: .5; }
889 | 20% {
890 | opacity: 1;
891 | -o-transform: translateY(0);
892 | transform: translateY(0); }
893 | 80% {
894 | opacity: 1;
895 | -o-transform: translateY(0);
896 | transform: translateY(0); }
897 | 90% {
898 | opacity: .5; }
899 | 100% {
900 | opacity: 0;
901 | -o-transform: translateY(145%);
902 | transform: translateY(145%); } }
903 |
904 | @keyframes ball-fall {
905 | 0% {
906 | opacity: 0;
907 | -webkit-transform: translateY(-145%);
908 | -moz-transform: translateY(-145%);
909 | -o-transform: translateY(-145%);
910 | transform: translateY(-145%); }
911 | 10% {
912 | opacity: .5; }
913 | 20% {
914 | opacity: 1;
915 | -webkit-transform: translateY(0);
916 | -moz-transform: translateY(0);
917 | -o-transform: translateY(0);
918 | transform: translateY(0); }
919 | 80% {
920 | opacity: 1;
921 | -webkit-transform: translateY(0);
922 | -moz-transform: translateY(0);
923 | -o-transform: translateY(0);
924 | transform: translateY(0); }
925 | 90% {
926 | opacity: .5; }
927 | 100% {
928 | opacity: 0;
929 | -webkit-transform: translateY(145%);
930 | -moz-transform: translateY(145%);
931 | -o-transform: translateY(145%);
932 | transform: translateY(145%); } }
933 |
--------------------------------------------------------------------------------
/lib/sweetalert/sweetalert.min.js:
--------------------------------------------------------------------------------
1 | !function(e,t,n){"use strict";!function o(e,t,n){function a(s,l){if(!t[s]){if(!e[s]){var i="function"==typeof require&&require;if(!l&&i)return i(s,!0);if(r)return r(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var c=t[s]={exports:{}};e[s][0].call(c.exports,function(t){var n=e[s][1][t];return a(n?n:t)},c,c.exports,o,e,t,n)}return t[s].exports}for(var r="function"==typeof require&&require,s=0;s=0;)n=n.replace(" "+t+" "," ");e.className=n.replace(/^\s+|\s+$/g,"")}},i=function(e){var n=t.createElement("div");return n.appendChild(t.createTextNode(e)),n.innerHTML},u=function(e){e.style.opacity="",e.style.display="block"},c=function(e){if(e&&!e.length)return u(e);for(var t=0;t0?setTimeout(o,t):e.style.display="none"});o()},h=function(n){if("function"==typeof MouseEvent){var o=new MouseEvent("click",{view:e,bubbles:!1,cancelable:!0});n.dispatchEvent(o)}else if(t.createEvent){var a=t.createEvent("MouseEvents");a.initEvent("click",!1,!1),n.dispatchEvent(a)}else t.createEventObject?n.fireEvent("onclick"):"function"==typeof n.onclick&&n.onclick()},b=function(t){"function"==typeof t.stopPropagation?(t.stopPropagation(),t.preventDefault()):e.event&&e.event.hasOwnProperty("cancelBubble")&&(e.event.cancelBubble=!0)};a.hasClass=r,a.addClass=s,a.removeClass=l,a.escapeHtml=i,a._show=u,a.show=c,a._hide=d,a.hide=f,a.isDescendant=p,a.getTopMargin=m,a.fadeIn=v,a.fadeOut=y,a.fireClick=h,a.stopEventPropagation=b},{}],5:[function(t,o,a){Object.defineProperty(a,"__esModule",{value:!0});var r=t("./handle-dom"),s=t("./handle-swal-dom"),l=function(t,o,a){var l=t||e.event,i=l.keyCode||l.which,u=a.querySelector("button.confirm"),c=a.querySelector("button.cancel"),d=a.querySelectorAll("button[tabindex]");if(-1!==[9,13,32,27].indexOf(i)){for(var f=l.target||l.srcElement,p=-1,m=0;m"),i.innerHTML=e.html?e.text:s.escapeHtml(e.text||"").split("\n").join(" "),e.text&&s.show(i),e.customClass)s.addClass(t,e.customClass),t.setAttribute("data-custom-class",e.customClass);else{var d=t.getAttribute("data-custom-class");s.removeClass(t,d),t.setAttribute("data-custom-class","")}if(s.hide(t.querySelectorAll(".sa-icon")),e.type&&!a.isIE8()){var f=function(){for(var o=!1,a=0;ao;o++)n=parseInt(e.substr(2*o,2),16),n=Math.round(Math.min(Math.max(0,n+n*t),255)).toString(16),a+=("00"+n).substr(n.length);return a};o.extend=a,o.hexToRgb=r,o.isIE8=s,o.logStr=l,o.colorLuminance=i},{}]},{},[1]),"function"==typeof define&&define.amd?define(function(){return sweetAlert}):"undefined"!=typeof module&&module.exports&&(module.exports=sweetAlert)}(window,document);
--------------------------------------------------------------------------------
/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sylvainar/ROS-OSM-map-integration/576b48c79f9cb031e740b0419f8ed5943dfc1114/screenshot.png
--------------------------------------------------------------------------------
/scripts.js:
--------------------------------------------------------------------------------
1 | // ============================= INTRODUCTION
2 |
3 | // Name : Autonomous-Car-GPS-Guiding
4 | // Author : Sylvain ARNOUTS
5 | // Mail : sylvain.ar@hotmail.fr
6 | // Date : From May to August 2016
7 | // Link : https://github.com/sylvainar/Autonomous-Car-GPS-Guiding
8 |
9 | // This code has been written in order to create a nice interface to interact
10 | // with the autonomous electric car of the UPV ai2 laboratory. It displays a map,
11 | // set a marker on the car's position using gps publishing topic, and allows a user
12 | // to start the routing by tapping the destination on the touchscreen.
13 |
14 | // License : Apache 2.0
15 |
16 | // ============================= CONFIGURATION
17 |
18 | // You can set here some parameters for the launch.
19 | // In the lab we're using two different GPS, so further in the
20 | // program, we're going to read rosparam to know what topic
21 | // we should listen to and what is the number of cycles
22 | // between each refreshing.
23 |
24 | // The name of the GPS publisher name by default
25 | var CONFIG_default_gps_topic_name = '/gps';
26 |
27 | // The number of cycles between every marker position reload
28 | var CONFIG_cycles_number = 20;
29 |
30 | // We can download the map online on OSM server, but
31 | // it won't work if the car isn't connected to the internet.
32 | // If you downloaded tiles and put it in the car, then you can
33 | // access them in local, or else, connect to server.
34 | // Set this config to "local" or "server".
35 | var CONFIG_tile_source = 'local';
36 |
37 | // If you use local tiles, set here the path to it
38 | var CONFIG_tile_local_path = 'UPV/{z}/{x}/{y}.png';
39 |
40 | // Network address to ROS server (it can be localhost or an IP)
41 | var CONFIG_ROS_server_URI = 'localhost';
42 |
43 |
44 | // ============================= FUNCTIONS
45 |
46 | // ===> mapInit() : init the map
47 | function mapInit() {
48 |
49 | //===> Var init
50 |
51 | // Fetch tiles
52 | if(CONFIG_tile_source == 'local')
53 | var tileUrl = CONFIG_tile_local_path;
54 | if(CONFIG_tile_source == 'server')
55 | var tileUrl = 'http://{s}.tile.osm.org/{z}/{x}/{y}.png';
56 |
57 | // Set attrib (always !)
58 | var attrib = 'Map data © OpenStreetMap contributors';
59 |
60 | //===> Map loading
61 | map = L.map('map');
62 | var osm = L.tileLayer(tileUrl, {
63 | minZoom: 12,
64 | maxZoom: 18,
65 | attribution: attrib
66 | });
67 | osm.addTo(map);
68 |
69 | L.easyButton('glyphicon-road', function(btn, map){
70 | swal({
71 | title: "Where do you want to go ?",
72 | text: "After closing this popup, click on the place you want to go.",
73 | type: "info",
74 | confirmButtonText: "Got it!",
75 | showCancelButton: true,
76 | closeOnConfirm: true,
77 | showLoaderOnConfirm: true,
78 | allowOutsideClick: false,
79 | },
80 | function(isConfirm){
81 | if (isConfirm) selectionMode = true;
82 | else selectionMode = false;
83 | });
84 | }).addTo(map);
85 |
86 | L.easyButton('glyphicon glyphicon-cog', function(btn, map){
87 | // TODO : add the possibility to modify params on the run
88 | }).addTo(map);
89 |
90 | L.easyButton('glyphicon glyphicon-refresh', function(btn, map){
91 | window.location.reload();
92 | }).addTo(map);
93 |
94 | markerFinish.addTo(map).setOpacity(0)
95 |
96 | return map;
97 | }
98 |
99 | // ============================= SCRIPT
100 |
101 | //===> Global variables
102 | var map;
103 | var selectionMode;
104 | var bounds;
105 | var currentPosition = {latitude : 0, longitude : 0};
106 | var startPoint;
107 | var endPoint;
108 | var markerPosition = L.marker([0,0]);
109 | var markerFinish = L.marker([0,0]);
110 | var zoomLevel = 16;
111 | var routeControl;
112 | var loadedMap = false;
113 | var i = 0;
114 | var listenerGPS;
115 |
116 | //===> ROS connexion
117 | var ros = new ROSLIB.Ros({
118 | url : 'ws://'+ CONFIG_ROS_server_URI +':9090'
119 | });
120 |
121 | swal({
122 | title: "Connecting to ROS...",
123 | showConfirmButton: false,
124 | closeOnConfirm: false,
125 | showLoaderOnConfirm: true,
126 | allowOutsideClick: false,
127 | allowEscapeKey: false
128 | });
129 |
130 | ros.on('connection', function() {
131 | console.log('Connected to websocket server.');
132 | swal({
133 | title: "Waiting...",
134 | text: "The navigation module can't work without the GPS. Launch the GPS and the module will start automatically.",
135 | type: "info",
136 | confirmButtonText: "Reload",
137 | closeOnConfirm: false,
138 | allowOutsideClick: false,
139 | allowEscapeKey: false
140 | },
141 | function(){
142 | window.location.reload();
143 | });
144 | });
145 |
146 | ros.on('error', function(error) {
147 | console.log('Error connecting to websocket server: ', error);
148 | swal({
149 | title: "Error connecting the ROS server",
150 | text: "Unable to reach ROS server. Is rosbridge launched ?",
151 | type: "error",
152 | confirmButtonText: "Retry",
153 | closeOnConfirm: false,
154 | allowOutsideClick: false,
155 | allowEscapeKey: false
156 | },
157 | function(){
158 | window.location.reload();
159 | });
160 | });
161 |
162 | ros.on('close', function() {
163 | console.log("Connexion closed.");
164 | swal({
165 | title: "Error connecting the ROS server",
166 | text: "Unable to reach ROS server. Is rosbridge launched ?",
167 | type: "error",
168 | confirmButtonText: "Retry",
169 | closeOnConfirm: false,
170 | allowOutsideClick: false,
171 | allowEscapeKey: false
172 | },
173 | function(){
174 | window.location.reload();
175 | });
176 | });
177 |
178 | //===> Init the routing parameters
179 | var paramStartLat = new ROSLIB.Param({
180 | ros : ros,
181 | name : '/routing_machine/start/latitude'
182 | });
183 | var paramStartLon = new ROSLIB.Param({
184 | ros : ros,
185 | name : '/routing_machine/start/longitude'
186 | });
187 | var paramEndLat = new ROSLIB.Param({
188 | ros : ros,
189 | name : '/routing_machine/destination/latitude'
190 | });
191 | var paramEndLon = new ROSLIB.Param({
192 | ros : ros,
193 | name : '/routing_machine/destination/longitude'
194 | });
195 | var paramEndGoTo = new ROSLIB.Param({
196 | ros : ros,
197 | name : '/routing_machine/destination/goTo'
198 | });
199 |
200 | paramStartLat.set(0);
201 | paramStartLon.set(0);
202 | paramEndLat.set(0);
203 | paramEndLon.set(0);
204 | paramEndGoTo.set(false);
205 |
206 | //===> Init the map and the click listener
207 |
208 | mapInit();
209 |
210 | map.on('click', function(e) {
211 | //When a click on the map is detected
212 | if(selectionMode == true)
213 | {
214 | selectionMode = false;
215 | //First, get the coordinates of the point clicked
216 | var lat = e.latlng.lat;
217 | var lon = e.latlng.lng;
218 | //Place a marker
219 | markerFinish.setLatLng([lat,lon]);
220 | markerFinish.setOpacity(1);
221 | setTimeout(function() {
222 | swal({
223 | title: "Is this correct ?",
224 | text: "Confirm the position to start the navigation.",
225 | type: "info",
226 | confirmButtonText: "Yes, let's go !",
227 | showCancelButton: true,
228 | closeOnConfirm: true,
229 | allowOutsideClick: false,
230 | },
231 | function(isConfirm){
232 | if (isConfirm)
233 | {
234 | //Logging stuff in the console
235 | console.log('Routing Start !');
236 | console.log('Start set to : '+ currentPosition.latitude + ' ' + currentPosition.longitude);
237 | console.log('Destination set to : '+lat + ' ' + lon);
238 | //Set all the parameters to the destination
239 | paramStartLat.set(currentPosition.latitude);
240 | paramStartLon.set(currentPosition.longitude);
241 | paramEndLat.set(lat);
242 | paramEndLon.set(lon);
243 | paramEndGoTo.set(true);// goTo is set to true, that means that their is a new destination to consider.
244 | }
245 | else
246 | {
247 | markerFinish.setOpacity(0);
248 | }
249 | })}, 1000);
250 | }
251 | });
252 |
253 | //===> Set the GPS listener
254 |
255 | // => Create param with initial value
256 | var paramTopicNameValue = CONFIG_default_gps_topic_name;
257 | var paramNbCyclesValue = CONFIG_cycles_number;
258 |
259 | // => Init the ROS param
260 | var paramTopicName = new ROSLIB.Param({ros : ros, name : '/panel/gps_topic'});
261 | var paramNbCycles = new ROSLIB.Param({ros : ros, name : '/panel/nb_cycles'});
262 |
263 |
264 |
265 | // => Set the value
266 | paramTopicName.get(function(value) {
267 | // If the param isn't created yet, we keep the default value
268 | if(value != null)
269 | paramTopicNameValue = value;
270 | else
271 | paramTopicName.set(paramTopicNameValue);
272 |
273 | paramNbCycles.get(function(value) {
274 | // If the param isn't created yet, we keep the default value
275 | if(value != null)
276 | paramNbCyclesValue = value;
277 | else
278 | paramNbCycles.set(paramNbCyclesValue);
279 |
280 |
281 | // Set the listener informations
282 | listenerGPS = new ROSLIB.Topic({
283 | ros : ros,
284 | name : paramTopicNameValue,
285 | messageType : 'sensor_msgs/NavSatFix'
286 | });
287 |
288 | // Set the callback function when a message from /gps is received
289 |
290 | var i = 0;
291 |
292 | listenerGPS.subscribe(function(message) {
293 | // We have to wait for the GPS before showing the map, because we don't know where we are
294 | var lat = message.latitude;
295 | var lon = message.longitude;
296 |
297 | if(loadedMap == false)
298 | {
299 | swal.close();
300 | // Center the map on the car's position
301 | map.setView([lat, lon], zoomLevel);
302 | // Add the marker on the map
303 | markerPosition.addTo(map);
304 | // Set the flag to true, so we don't have to load the map again
305 | loadedMap = true;
306 | }
307 |
308 | if(i % paramNbCyclesValue == 0)
309 | {
310 | // Refresh the global variable with the position
311 | currentPosition.latitude = lat;
312 | currentPosition.longitude = lon;
313 | // Refresh the position of the marker on the map
314 | markerPosition.setLatLng([lat, lon]);
315 | // If the marker has went out of the map, we move the map
316 | bounds = map.getBounds();
317 | if(!bounds.contains([lat, lon]))
318 | map.setView([lat, lon], zoomLevel);
319 |
320 | console.log("Update position");
321 | }
322 |
323 | i++;
324 |
325 | });
326 | });
327 | });
328 |
329 |
--------------------------------------------------------------------------------