foliage 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +22 -0
  3. data/README.md +9 -0
  4. data/app/assets/images/.keep +0 -0
  5. data/app/assets/images/map/marker/icon-2x.png +0 -0
  6. data/app/assets/images/map/marker/icon.png +0 -0
  7. data/app/assets/images/map/marker/icon.svg +67 -0
  8. data/app/assets/images/map/marker/shadow.png +0 -0
  9. data/app/assets/javascripts/core_ext.js.coffee +61 -0
  10. data/app/assets/javascripts/foliage.js.coffee +23 -0
  11. data/app/assets/javascripts/foliage/band.js.coffee +99 -0
  12. data/app/assets/javascripts/foliage/bubbles.js.coffee +77 -0
  13. data/app/assets/javascripts/foliage/categories.js.coffee +70 -0
  14. data/app/assets/javascripts/foliage/choropleth.js.coffee +51 -0
  15. data/app/assets/javascripts/foliage/color.js.coffee +39 -0
  16. data/app/assets/javascripts/foliage/gradient.js.coffee +72 -0
  17. data/app/assets/javascripts/foliage/heatmap.js.coffee +49 -0
  18. data/app/assets/javascripts/foliage/leaf.js.coffee +422 -0
  19. data/app/assets/javascripts/foliage/path.js.coffee +76 -0
  20. data/app/assets/javascripts/foliage/paths.js.coffee +131 -0
  21. data/app/assets/javascripts/foliage/point_group.js.coffee +83 -0
  22. data/app/assets/javascripts/foliage/points.js.coffee +79 -0
  23. data/app/assets/javascripts/foliage/simple.js.coffee +35 -0
  24. data/app/assets/javascripts/leaflet/geographic_util.js.coffee +23 -0
  25. data/app/assets/javascripts/leaflet/ghost_label.js.coffee +100 -0
  26. data/app/assets/javascripts/leaflet/ghost_label_cluster.js.coffee +192 -0
  27. data/app/assets/javascripts/leaflet/layers_scheduler.js.coffee +57 -0
  28. data/app/assets/javascripts/leaflet/reactive_measure.js.coffee +414 -0
  29. data/app/assets/stylesheets/all.scss +16 -0
  30. data/app/assets/stylesheets/application.css +15 -0
  31. data/app/assets/stylesheets/compass/reset.scss +3 -0
  32. data/app/assets/stylesheets/compass/reset/utilities.scss +142 -0
  33. data/app/assets/stylesheets/leaflet.scss +1093 -0
  34. data/app/assets/stylesheets/leaflet/label.scss +40 -0
  35. data/app/assets/stylesheets/leaflet/tooltip.scss +42 -0
  36. data/app/assets/stylesheets/mixins.scss +131 -0
  37. data/app/assets/stylesheets/reset.scss +89 -0
  38. data/app/assets/stylesheets/variables.scss +47 -0
  39. data/app/helpers/foliage_helper.rb +23 -0
  40. data/lib/foliage.rb +9 -0
  41. data/lib/foliage/leaf.rb +235 -0
  42. data/lib/foliage/rails.rb +2 -0
  43. data/lib/foliage/rails/engine.rb +7 -0
  44. data/lib/foliage/rails/integration.rb +8 -0
  45. data/lib/foliage/version.rb +3 -0
  46. data/vendor/assets/javascripts/.keep +0 -0
  47. data/vendor/assets/javascripts/autosize.js +211 -0
  48. data/vendor/assets/javascripts/geographiclib.js +3074 -0
  49. data/vendor/assets/javascripts/leaflet.js.erb +9175 -0
  50. data/vendor/assets/javascripts/leaflet/draw.js +3573 -0
  51. data/vendor/assets/javascripts/leaflet/easy-button.js +366 -0
  52. data/vendor/assets/javascripts/leaflet/fullscreen.js +162 -0
  53. data/vendor/assets/javascripts/leaflet/heatmap.js +142 -0
  54. data/vendor/assets/javascripts/leaflet/label.js +545 -0
  55. data/vendor/assets/javascripts/leaflet/measure.js +6966 -0
  56. data/vendor/assets/javascripts/leaflet/modal.js +364 -0
  57. data/vendor/assets/javascripts/leaflet/providers.js +479 -0
  58. data/vendor/assets/javascripts/rbush.js +621 -0
  59. data/vendor/assets/stylesheets/.keep +0 -0
  60. data/vendor/assets/stylesheets/bootstrap/mixins.scss +55 -0
  61. data/vendor/assets/stylesheets/bootstrap/variables.scss +10 -0
  62. data/vendor/assets/stylesheets/leaflet.scss +479 -0
  63. data/vendor/assets/stylesheets/leaflet/draw.scss +282 -0
  64. data/vendor/assets/stylesheets/leaflet/easy-button.scss +56 -0
  65. data/vendor/assets/stylesheets/leaflet/fullscreen.scss +2 -0
  66. data/vendor/assets/stylesheets/leaflet/measure.scss +168 -0
  67. data/vendor/assets/stylesheets/leaflet/modal.scss +85 -0
  68. metadata +171 -0
File without changes
@@ -0,0 +1,55 @@
1
+ // Copyright (c) 2011-2016 Twitter, Inc
2
+ // Copyright (c) 2011-2016 The Bootstrap Authors
3
+ // MIT License
4
+ //
5
+ // Lifted from Botstrap Sass's GitHub :
6
+ // http://github.com/twbs/bootstrap-sass/blob/master/assets/stylesheets/bootstrap/mixins/
7
+
8
+
9
+ //// _vendor-prefixes.scss
10
+
11
+ // Box Shadow - Line 68 to 71
12
+ @mixin box-shadow($shadow...) {
13
+ -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1
14
+ box-shadow: $shadow;
15
+ }
16
+
17
+ // Box-Sizing - Line 73 to 78
18
+ @mixin box-sizing($boxmodel) {
19
+ -webkit-box-sizing: $boxmodel;
20
+ -moz-box-sizing: $boxmodel;
21
+ box-sizing: $boxmodel;
22
+ }
23
+
24
+ // Transition - Line 185 to 189
25
+ @mixin transition($transition...) {
26
+ -webkit-transition: $transition;
27
+ -o-transition: $transition;
28
+ transition: $transition;
29
+ }
30
+
31
+ // User Select - Line 217 to 222
32
+ @mixin user-select($select) {
33
+ -webkit-user-select: $select;
34
+ -moz-user-select: $select;
35
+ -ms-user-select: $select; // IE10+
36
+ user-select: $select;
37
+ }
38
+
39
+ // Rotate - Line 147 to 152
40
+ @mixin rotate($degrees) {
41
+ -webkit-transform: rotate($degrees);
42
+ -ms-transform: rotate($degrees); // IE9 only
43
+ -o-transform: rotate($degrees);
44
+ transform: rotate($degrees);
45
+ }
46
+
47
+ //// _opacity.scss
48
+
49
+ // Opacity - Line 1 to 8
50
+ @mixin opacity($opacity) {
51
+ opacity: $opacity;
52
+ // IE8 filter
53
+ $opacity-ie: ($opacity * 100);
54
+ filter: alpha(opacity=$opacity-ie);
55
+ }
@@ -0,0 +1,10 @@
1
+ // Copyright (c) 2011-2016 Twitter, Inc
2
+ // Copyright (c) 2011-2016 The Bootstrap Authors
3
+ // MIT License
4
+ //
5
+ // Lifted from Botstrap Sass's GitHub :
6
+ // http://github.com/twbs/bootstrap-sass/blob/master/assets/stylesheets/bootstrap/_variables.scss
7
+
8
+ // Popover bg colors - Line 544 & 553
9
+ $popover-bg: #fff !default;
10
+ $popover-title-bg: darken($popover-bg, 3%) !default;
@@ -0,0 +1,479 @@
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
+ }