studio-engine 0.82.1 → 0.83.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +55 -0
- data/README.md +3 -0
- data/app/assets/javascripts/studio/leaflet.js +42 -0
- data/app/assets/stylesheets/studio/leaflet.css +693 -0
- data/app/controllers/studio/bookings_controller.rb +22 -0
- data/app/helpers/studio/site_footer_helper.rb +180 -0
- data/app/views/studio/booking/_assets.html.erb +162 -0
- data/app/views/studio/booking/_frame.html.erb +41 -0
- data/app/views/studio/booking/_popup.html.erb +34 -0
- data/app/views/studio/bookings/show.html.erb +20 -0
- data/app/views/studio/site_footer/_assets.html.erb +209 -0
- data/app/views/studio/site_footer/_footer.html.erb +99 -0
- data/app/views/studio/site_footer/_link.html.erb +14 -0
- data/app/views/studio/site_footer/_map.html.erb +22 -0
- data/app/views/studio/site_footer/_social_icon.html.erb +23 -0
- data/app/views/style/_site_footer.html.erb +79 -0
- data/app/views/style/_tricks.html.erb +3 -0
- data/lib/studio/booking.rb +47 -0
- data/lib/studio/engine.rb +2 -0
- data/lib/studio/site_footer.rb +294 -0
- data/lib/studio/version.rb +1 -1
- data/lib/studio.rb +94 -0
- metadata +17 -1
|
@@ -0,0 +1,693 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Leaflet 1.9.4 stylesheet — VENDORED into studio-engine (no CDN, CSP-safe).
|
|
3
|
+
Source: https://unpkg.com/leaflet@1.9.4/dist/leaflet.css
|
|
4
|
+
Shipped as an engine asset (studio/leaflet.css), loaded on demand beside
|
|
5
|
+
studio/leaflet.js by studio/site_footer/_assets.
|
|
6
|
+
|
|
7
|
+
THREE RULES ARE REMOVED from the published file: the two layers-control
|
|
8
|
+
toggle backgrounds and .leaflet-default-icon-path. Each pointed at an image
|
|
9
|
+
(images/layers.png, images/layers-2x.png, images/marker-icon.png) that is not
|
|
10
|
+
shipped, and an asset pipeline that resolves stylesheet URLs would warn on every build.
|
|
11
|
+
So Leaflet's DEFAULT marker icon and its layers control have no artwork here:
|
|
12
|
+
mark a point with L.divIcon, as the footer map does.
|
|
13
|
+
|
|
14
|
+
BSD 2-Clause License
|
|
15
|
+
|
|
16
|
+
Copyright (c) 2010-2023, Volodymyr Agafonkin
|
|
17
|
+
Copyright (c) 2010-2011, CloudMade
|
|
18
|
+
All rights reserved.
|
|
19
|
+
|
|
20
|
+
Redistribution and use in source and binary forms, with or without modification,
|
|
21
|
+
are permitted provided that the following conditions are met:
|
|
22
|
+
|
|
23
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
24
|
+
list of conditions and the following disclaimer.
|
|
25
|
+
|
|
26
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
27
|
+
this list of conditions and the following disclaimer in the documentation
|
|
28
|
+
and/or other materials provided with the distribution.
|
|
29
|
+
|
|
30
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
31
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
32
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
33
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
34
|
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
35
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
36
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
37
|
+
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
38
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
39
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
/* required styles */
|
|
43
|
+
|
|
44
|
+
.leaflet-pane,
|
|
45
|
+
.leaflet-tile,
|
|
46
|
+
.leaflet-marker-icon,
|
|
47
|
+
.leaflet-marker-shadow,
|
|
48
|
+
.leaflet-tile-container,
|
|
49
|
+
.leaflet-pane > svg,
|
|
50
|
+
.leaflet-pane > canvas,
|
|
51
|
+
.leaflet-zoom-box,
|
|
52
|
+
.leaflet-image-layer,
|
|
53
|
+
.leaflet-layer {
|
|
54
|
+
position: absolute;
|
|
55
|
+
left: 0;
|
|
56
|
+
top: 0;
|
|
57
|
+
}
|
|
58
|
+
.leaflet-container {
|
|
59
|
+
overflow: hidden;
|
|
60
|
+
}
|
|
61
|
+
.leaflet-tile,
|
|
62
|
+
.leaflet-marker-icon,
|
|
63
|
+
.leaflet-marker-shadow {
|
|
64
|
+
-webkit-user-select: none;
|
|
65
|
+
-moz-user-select: none;
|
|
66
|
+
user-select: none;
|
|
67
|
+
-webkit-user-drag: none;
|
|
68
|
+
}
|
|
69
|
+
/* Prevents IE11 from highlighting tiles in blue */
|
|
70
|
+
.leaflet-tile::selection {
|
|
71
|
+
background: transparent;
|
|
72
|
+
}
|
|
73
|
+
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
|
|
74
|
+
.leaflet-safari .leaflet-tile {
|
|
75
|
+
image-rendering: -webkit-optimize-contrast;
|
|
76
|
+
}
|
|
77
|
+
/* hack that prevents hw layers "stretching" when loading new tiles */
|
|
78
|
+
.leaflet-safari .leaflet-tile-container {
|
|
79
|
+
width: 1600px;
|
|
80
|
+
height: 1600px;
|
|
81
|
+
-webkit-transform-origin: 0 0;
|
|
82
|
+
}
|
|
83
|
+
.leaflet-marker-icon,
|
|
84
|
+
.leaflet-marker-shadow {
|
|
85
|
+
display: block;
|
|
86
|
+
}
|
|
87
|
+
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
|
|
88
|
+
/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
|
|
89
|
+
.leaflet-container .leaflet-overlay-pane svg {
|
|
90
|
+
max-width: none !important;
|
|
91
|
+
max-height: none !important;
|
|
92
|
+
}
|
|
93
|
+
.leaflet-container .leaflet-marker-pane img,
|
|
94
|
+
.leaflet-container .leaflet-shadow-pane img,
|
|
95
|
+
.leaflet-container .leaflet-tile-pane img,
|
|
96
|
+
.leaflet-container img.leaflet-image-layer,
|
|
97
|
+
.leaflet-container .leaflet-tile {
|
|
98
|
+
max-width: none !important;
|
|
99
|
+
max-height: none !important;
|
|
100
|
+
width: auto;
|
|
101
|
+
padding: 0;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.leaflet-container img.leaflet-tile {
|
|
105
|
+
/* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */
|
|
106
|
+
mix-blend-mode: plus-lighter;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.leaflet-container.leaflet-touch-zoom {
|
|
110
|
+
-ms-touch-action: pan-x pan-y;
|
|
111
|
+
touch-action: pan-x pan-y;
|
|
112
|
+
}
|
|
113
|
+
.leaflet-container.leaflet-touch-drag {
|
|
114
|
+
-ms-touch-action: pinch-zoom;
|
|
115
|
+
/* Fallback for FF which doesn't support pinch-zoom */
|
|
116
|
+
touch-action: none;
|
|
117
|
+
touch-action: pinch-zoom;
|
|
118
|
+
}
|
|
119
|
+
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
|
|
120
|
+
-ms-touch-action: none;
|
|
121
|
+
touch-action: none;
|
|
122
|
+
}
|
|
123
|
+
.leaflet-container {
|
|
124
|
+
-webkit-tap-highlight-color: transparent;
|
|
125
|
+
}
|
|
126
|
+
.leaflet-container a {
|
|
127
|
+
-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
|
|
128
|
+
}
|
|
129
|
+
.leaflet-tile {
|
|
130
|
+
filter: inherit;
|
|
131
|
+
visibility: hidden;
|
|
132
|
+
}
|
|
133
|
+
.leaflet-tile-loaded {
|
|
134
|
+
visibility: inherit;
|
|
135
|
+
}
|
|
136
|
+
.leaflet-zoom-box {
|
|
137
|
+
width: 0;
|
|
138
|
+
height: 0;
|
|
139
|
+
-moz-box-sizing: border-box;
|
|
140
|
+
box-sizing: border-box;
|
|
141
|
+
z-index: 800;
|
|
142
|
+
}
|
|
143
|
+
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
|
|
144
|
+
.leaflet-overlay-pane svg {
|
|
145
|
+
-moz-user-select: none;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.leaflet-pane { z-index: 400; }
|
|
149
|
+
|
|
150
|
+
.leaflet-tile-pane { z-index: 200; }
|
|
151
|
+
.leaflet-overlay-pane { z-index: 400; }
|
|
152
|
+
.leaflet-shadow-pane { z-index: 500; }
|
|
153
|
+
.leaflet-marker-pane { z-index: 600; }
|
|
154
|
+
.leaflet-tooltip-pane { z-index: 650; }
|
|
155
|
+
.leaflet-popup-pane { z-index: 700; }
|
|
156
|
+
|
|
157
|
+
.leaflet-map-pane canvas { z-index: 100; }
|
|
158
|
+
.leaflet-map-pane svg { z-index: 200; }
|
|
159
|
+
|
|
160
|
+
.leaflet-vml-shape {
|
|
161
|
+
width: 1px;
|
|
162
|
+
height: 1px;
|
|
163
|
+
}
|
|
164
|
+
.lvml {
|
|
165
|
+
behavior: url(#default#VML);
|
|
166
|
+
display: inline-block;
|
|
167
|
+
position: absolute;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
/* control positioning */
|
|
172
|
+
|
|
173
|
+
.leaflet-control {
|
|
174
|
+
position: relative;
|
|
175
|
+
z-index: 800;
|
|
176
|
+
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
|
177
|
+
pointer-events: auto;
|
|
178
|
+
}
|
|
179
|
+
.leaflet-top,
|
|
180
|
+
.leaflet-bottom {
|
|
181
|
+
position: absolute;
|
|
182
|
+
z-index: 1000;
|
|
183
|
+
pointer-events: none;
|
|
184
|
+
}
|
|
185
|
+
.leaflet-top {
|
|
186
|
+
top: 0;
|
|
187
|
+
}
|
|
188
|
+
.leaflet-right {
|
|
189
|
+
right: 0;
|
|
190
|
+
}
|
|
191
|
+
.leaflet-bottom {
|
|
192
|
+
bottom: 0;
|
|
193
|
+
}
|
|
194
|
+
.leaflet-left {
|
|
195
|
+
left: 0;
|
|
196
|
+
}
|
|
197
|
+
.leaflet-control {
|
|
198
|
+
float: left;
|
|
199
|
+
clear: both;
|
|
200
|
+
}
|
|
201
|
+
.leaflet-right .leaflet-control {
|
|
202
|
+
float: right;
|
|
203
|
+
}
|
|
204
|
+
.leaflet-top .leaflet-control {
|
|
205
|
+
margin-top: 10px;
|
|
206
|
+
}
|
|
207
|
+
.leaflet-bottom .leaflet-control {
|
|
208
|
+
margin-bottom: 10px;
|
|
209
|
+
}
|
|
210
|
+
.leaflet-left .leaflet-control {
|
|
211
|
+
margin-left: 10px;
|
|
212
|
+
}
|
|
213
|
+
.leaflet-right .leaflet-control {
|
|
214
|
+
margin-right: 10px;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
/* zoom and fade animations */
|
|
219
|
+
|
|
220
|
+
.leaflet-fade-anim .leaflet-popup {
|
|
221
|
+
opacity: 0;
|
|
222
|
+
-webkit-transition: opacity 0.2s linear;
|
|
223
|
+
-moz-transition: opacity 0.2s linear;
|
|
224
|
+
transition: opacity 0.2s linear;
|
|
225
|
+
}
|
|
226
|
+
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
|
|
227
|
+
opacity: 1;
|
|
228
|
+
}
|
|
229
|
+
.leaflet-zoom-animated {
|
|
230
|
+
-webkit-transform-origin: 0 0;
|
|
231
|
+
-ms-transform-origin: 0 0;
|
|
232
|
+
transform-origin: 0 0;
|
|
233
|
+
}
|
|
234
|
+
svg.leaflet-zoom-animated {
|
|
235
|
+
will-change: transform;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.leaflet-zoom-anim .leaflet-zoom-animated {
|
|
239
|
+
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
|
|
240
|
+
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
|
|
241
|
+
transition: transform 0.25s cubic-bezier(0,0,0.25,1);
|
|
242
|
+
}
|
|
243
|
+
.leaflet-zoom-anim .leaflet-tile,
|
|
244
|
+
.leaflet-pan-anim .leaflet-tile {
|
|
245
|
+
-webkit-transition: none;
|
|
246
|
+
-moz-transition: none;
|
|
247
|
+
transition: none;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.leaflet-zoom-anim .leaflet-zoom-hide {
|
|
251
|
+
visibility: hidden;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
/* cursors */
|
|
256
|
+
|
|
257
|
+
.leaflet-interactive {
|
|
258
|
+
cursor: pointer;
|
|
259
|
+
}
|
|
260
|
+
.leaflet-grab {
|
|
261
|
+
cursor: -webkit-grab;
|
|
262
|
+
cursor: -moz-grab;
|
|
263
|
+
cursor: grab;
|
|
264
|
+
}
|
|
265
|
+
.leaflet-crosshair,
|
|
266
|
+
.leaflet-crosshair .leaflet-interactive {
|
|
267
|
+
cursor: crosshair;
|
|
268
|
+
}
|
|
269
|
+
.leaflet-popup-pane,
|
|
270
|
+
.leaflet-control {
|
|
271
|
+
cursor: auto;
|
|
272
|
+
}
|
|
273
|
+
.leaflet-dragging .leaflet-grab,
|
|
274
|
+
.leaflet-dragging .leaflet-grab .leaflet-interactive,
|
|
275
|
+
.leaflet-dragging .leaflet-marker-draggable {
|
|
276
|
+
cursor: move;
|
|
277
|
+
cursor: -webkit-grabbing;
|
|
278
|
+
cursor: -moz-grabbing;
|
|
279
|
+
cursor: grabbing;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/* marker & overlays interactivity */
|
|
283
|
+
.leaflet-marker-icon,
|
|
284
|
+
.leaflet-marker-shadow,
|
|
285
|
+
.leaflet-image-layer,
|
|
286
|
+
.leaflet-pane > svg path,
|
|
287
|
+
.leaflet-tile-container {
|
|
288
|
+
pointer-events: none;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.leaflet-marker-icon.leaflet-interactive,
|
|
292
|
+
.leaflet-image-layer.leaflet-interactive,
|
|
293
|
+
.leaflet-pane > svg path.leaflet-interactive,
|
|
294
|
+
svg.leaflet-image-layer.leaflet-interactive path {
|
|
295
|
+
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
|
296
|
+
pointer-events: auto;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/* visual tweaks */
|
|
300
|
+
|
|
301
|
+
.leaflet-container {
|
|
302
|
+
background: #ddd;
|
|
303
|
+
outline-offset: 1px;
|
|
304
|
+
}
|
|
305
|
+
.leaflet-container a {
|
|
306
|
+
color: #0078A8;
|
|
307
|
+
}
|
|
308
|
+
.leaflet-zoom-box {
|
|
309
|
+
border: 2px dotted #38f;
|
|
310
|
+
background: rgba(255,255,255,0.5);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
/* general typography */
|
|
315
|
+
.leaflet-container {
|
|
316
|
+
font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
|
|
317
|
+
font-size: 12px;
|
|
318
|
+
font-size: 0.75rem;
|
|
319
|
+
line-height: 1.5;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
/* general toolbar styles */
|
|
324
|
+
|
|
325
|
+
.leaflet-bar {
|
|
326
|
+
box-shadow: 0 1px 5px rgba(0,0,0,0.65);
|
|
327
|
+
border-radius: 4px;
|
|
328
|
+
}
|
|
329
|
+
.leaflet-bar a {
|
|
330
|
+
background-color: #fff;
|
|
331
|
+
border-bottom: 1px solid #ccc;
|
|
332
|
+
width: 26px;
|
|
333
|
+
height: 26px;
|
|
334
|
+
line-height: 26px;
|
|
335
|
+
display: block;
|
|
336
|
+
text-align: center;
|
|
337
|
+
text-decoration: none;
|
|
338
|
+
color: black;
|
|
339
|
+
}
|
|
340
|
+
.leaflet-bar a,
|
|
341
|
+
.leaflet-control-layers-toggle {
|
|
342
|
+
background-position: 50% 50%;
|
|
343
|
+
background-repeat: no-repeat;
|
|
344
|
+
display: block;
|
|
345
|
+
}
|
|
346
|
+
.leaflet-bar a:hover,
|
|
347
|
+
.leaflet-bar a:focus {
|
|
348
|
+
background-color: #f4f4f4;
|
|
349
|
+
}
|
|
350
|
+
.leaflet-bar a:first-child {
|
|
351
|
+
border-top-left-radius: 4px;
|
|
352
|
+
border-top-right-radius: 4px;
|
|
353
|
+
}
|
|
354
|
+
.leaflet-bar a:last-child {
|
|
355
|
+
border-bottom-left-radius: 4px;
|
|
356
|
+
border-bottom-right-radius: 4px;
|
|
357
|
+
border-bottom: none;
|
|
358
|
+
}
|
|
359
|
+
.leaflet-bar a.leaflet-disabled {
|
|
360
|
+
cursor: default;
|
|
361
|
+
background-color: #f4f4f4;
|
|
362
|
+
color: #bbb;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
.leaflet-touch .leaflet-bar a {
|
|
366
|
+
width: 30px;
|
|
367
|
+
height: 30px;
|
|
368
|
+
line-height: 30px;
|
|
369
|
+
}
|
|
370
|
+
.leaflet-touch .leaflet-bar a:first-child {
|
|
371
|
+
border-top-left-radius: 2px;
|
|
372
|
+
border-top-right-radius: 2px;
|
|
373
|
+
}
|
|
374
|
+
.leaflet-touch .leaflet-bar a:last-child {
|
|
375
|
+
border-bottom-left-radius: 2px;
|
|
376
|
+
border-bottom-right-radius: 2px;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/* zoom control */
|
|
380
|
+
|
|
381
|
+
.leaflet-control-zoom-in,
|
|
382
|
+
.leaflet-control-zoom-out {
|
|
383
|
+
font: bold 18px 'Lucida Console', Monaco, monospace;
|
|
384
|
+
text-indent: 1px;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
|
|
388
|
+
font-size: 22px;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
/* layers control */
|
|
393
|
+
|
|
394
|
+
.leaflet-control-layers {
|
|
395
|
+
box-shadow: 0 1px 5px rgba(0,0,0,0.4);
|
|
396
|
+
background: #fff;
|
|
397
|
+
border-radius: 5px;
|
|
398
|
+
}
|
|
399
|
+
.leaflet-control-layers-toggle {
|
|
400
|
+
width: 36px;
|
|
401
|
+
height: 36px;
|
|
402
|
+
}
|
|
403
|
+
.leaflet-touch .leaflet-control-layers-toggle {
|
|
404
|
+
width: 44px;
|
|
405
|
+
height: 44px;
|
|
406
|
+
}
|
|
407
|
+
.leaflet-control-layers .leaflet-control-layers-list,
|
|
408
|
+
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
|
|
409
|
+
display: none;
|
|
410
|
+
}
|
|
411
|
+
.leaflet-control-layers-expanded .leaflet-control-layers-list {
|
|
412
|
+
display: block;
|
|
413
|
+
position: relative;
|
|
414
|
+
}
|
|
415
|
+
.leaflet-control-layers-expanded {
|
|
416
|
+
padding: 6px 10px 6px 6px;
|
|
417
|
+
color: #333;
|
|
418
|
+
background: #fff;
|
|
419
|
+
}
|
|
420
|
+
.leaflet-control-layers-scrollbar {
|
|
421
|
+
overflow-y: scroll;
|
|
422
|
+
overflow-x: hidden;
|
|
423
|
+
padding-right: 5px;
|
|
424
|
+
}
|
|
425
|
+
.leaflet-control-layers-selector {
|
|
426
|
+
margin-top: 2px;
|
|
427
|
+
position: relative;
|
|
428
|
+
top: 1px;
|
|
429
|
+
}
|
|
430
|
+
.leaflet-control-layers label {
|
|
431
|
+
display: block;
|
|
432
|
+
font-size: 13px;
|
|
433
|
+
font-size: 1.08333em;
|
|
434
|
+
}
|
|
435
|
+
.leaflet-control-layers-separator {
|
|
436
|
+
height: 0;
|
|
437
|
+
border-top: 1px solid #ddd;
|
|
438
|
+
margin: 5px -10px 5px -6px;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
/* attribution and scale controls */
|
|
444
|
+
|
|
445
|
+
.leaflet-container .leaflet-control-attribution {
|
|
446
|
+
background: #fff;
|
|
447
|
+
background: rgba(255, 255, 255, 0.8);
|
|
448
|
+
margin: 0;
|
|
449
|
+
}
|
|
450
|
+
.leaflet-control-attribution,
|
|
451
|
+
.leaflet-control-scale-line {
|
|
452
|
+
padding: 0 5px;
|
|
453
|
+
color: #333;
|
|
454
|
+
line-height: 1.4;
|
|
455
|
+
}
|
|
456
|
+
.leaflet-control-attribution a {
|
|
457
|
+
text-decoration: none;
|
|
458
|
+
}
|
|
459
|
+
.leaflet-control-attribution a:hover,
|
|
460
|
+
.leaflet-control-attribution a:focus {
|
|
461
|
+
text-decoration: underline;
|
|
462
|
+
}
|
|
463
|
+
.leaflet-attribution-flag {
|
|
464
|
+
display: inline !important;
|
|
465
|
+
vertical-align: baseline !important;
|
|
466
|
+
width: 1em;
|
|
467
|
+
height: 0.6669em;
|
|
468
|
+
}
|
|
469
|
+
.leaflet-left .leaflet-control-scale {
|
|
470
|
+
margin-left: 5px;
|
|
471
|
+
}
|
|
472
|
+
.leaflet-bottom .leaflet-control-scale {
|
|
473
|
+
margin-bottom: 5px;
|
|
474
|
+
}
|
|
475
|
+
.leaflet-control-scale-line {
|
|
476
|
+
border: 2px solid #777;
|
|
477
|
+
border-top: none;
|
|
478
|
+
line-height: 1.1;
|
|
479
|
+
padding: 2px 5px 1px;
|
|
480
|
+
white-space: nowrap;
|
|
481
|
+
-moz-box-sizing: border-box;
|
|
482
|
+
box-sizing: border-box;
|
|
483
|
+
background: rgba(255, 255, 255, 0.8);
|
|
484
|
+
text-shadow: 1px 1px #fff;
|
|
485
|
+
}
|
|
486
|
+
.leaflet-control-scale-line:not(:first-child) {
|
|
487
|
+
border-top: 2px solid #777;
|
|
488
|
+
border-bottom: none;
|
|
489
|
+
margin-top: -2px;
|
|
490
|
+
}
|
|
491
|
+
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
|
|
492
|
+
border-bottom: 2px solid #777;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
.leaflet-touch .leaflet-control-attribution,
|
|
496
|
+
.leaflet-touch .leaflet-control-layers,
|
|
497
|
+
.leaflet-touch .leaflet-bar {
|
|
498
|
+
box-shadow: none;
|
|
499
|
+
}
|
|
500
|
+
.leaflet-touch .leaflet-control-layers,
|
|
501
|
+
.leaflet-touch .leaflet-bar {
|
|
502
|
+
border: 2px solid rgba(0,0,0,0.2);
|
|
503
|
+
background-clip: padding-box;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
/* popup */
|
|
508
|
+
|
|
509
|
+
.leaflet-popup {
|
|
510
|
+
position: absolute;
|
|
511
|
+
text-align: center;
|
|
512
|
+
margin-bottom: 20px;
|
|
513
|
+
}
|
|
514
|
+
.leaflet-popup-content-wrapper {
|
|
515
|
+
padding: 1px;
|
|
516
|
+
text-align: left;
|
|
517
|
+
border-radius: 12px;
|
|
518
|
+
}
|
|
519
|
+
.leaflet-popup-content {
|
|
520
|
+
margin: 13px 24px 13px 20px;
|
|
521
|
+
line-height: 1.3;
|
|
522
|
+
font-size: 13px;
|
|
523
|
+
font-size: 1.08333em;
|
|
524
|
+
min-height: 1px;
|
|
525
|
+
}
|
|
526
|
+
.leaflet-popup-content p {
|
|
527
|
+
margin: 17px 0;
|
|
528
|
+
margin: 1.3em 0;
|
|
529
|
+
}
|
|
530
|
+
.leaflet-popup-tip-container {
|
|
531
|
+
width: 40px;
|
|
532
|
+
height: 20px;
|
|
533
|
+
position: absolute;
|
|
534
|
+
left: 50%;
|
|
535
|
+
margin-top: -1px;
|
|
536
|
+
margin-left: -20px;
|
|
537
|
+
overflow: hidden;
|
|
538
|
+
pointer-events: none;
|
|
539
|
+
}
|
|
540
|
+
.leaflet-popup-tip {
|
|
541
|
+
width: 17px;
|
|
542
|
+
height: 17px;
|
|
543
|
+
padding: 1px;
|
|
544
|
+
|
|
545
|
+
margin: -10px auto 0;
|
|
546
|
+
pointer-events: auto;
|
|
547
|
+
|
|
548
|
+
-webkit-transform: rotate(45deg);
|
|
549
|
+
-moz-transform: rotate(45deg);
|
|
550
|
+
-ms-transform: rotate(45deg);
|
|
551
|
+
transform: rotate(45deg);
|
|
552
|
+
}
|
|
553
|
+
.leaflet-popup-content-wrapper,
|
|
554
|
+
.leaflet-popup-tip {
|
|
555
|
+
background: white;
|
|
556
|
+
color: #333;
|
|
557
|
+
box-shadow: 0 3px 14px rgba(0,0,0,0.4);
|
|
558
|
+
}
|
|
559
|
+
.leaflet-container a.leaflet-popup-close-button {
|
|
560
|
+
position: absolute;
|
|
561
|
+
top: 0;
|
|
562
|
+
right: 0;
|
|
563
|
+
border: none;
|
|
564
|
+
text-align: center;
|
|
565
|
+
width: 24px;
|
|
566
|
+
height: 24px;
|
|
567
|
+
font: 16px/24px Tahoma, Verdana, sans-serif;
|
|
568
|
+
color: #757575;
|
|
569
|
+
text-decoration: none;
|
|
570
|
+
background: transparent;
|
|
571
|
+
}
|
|
572
|
+
.leaflet-container a.leaflet-popup-close-button:hover,
|
|
573
|
+
.leaflet-container a.leaflet-popup-close-button:focus {
|
|
574
|
+
color: #585858;
|
|
575
|
+
}
|
|
576
|
+
.leaflet-popup-scrolled {
|
|
577
|
+
overflow: auto;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
.leaflet-oldie .leaflet-popup-content-wrapper {
|
|
581
|
+
-ms-zoom: 1;
|
|
582
|
+
}
|
|
583
|
+
.leaflet-oldie .leaflet-popup-tip {
|
|
584
|
+
width: 24px;
|
|
585
|
+
margin: 0 auto;
|
|
586
|
+
|
|
587
|
+
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
|
|
588
|
+
filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
.leaflet-oldie .leaflet-control-zoom,
|
|
592
|
+
.leaflet-oldie .leaflet-control-layers,
|
|
593
|
+
.leaflet-oldie .leaflet-popup-content-wrapper,
|
|
594
|
+
.leaflet-oldie .leaflet-popup-tip {
|
|
595
|
+
border: 1px solid #999;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
/* div icon */
|
|
600
|
+
|
|
601
|
+
.leaflet-div-icon {
|
|
602
|
+
background: #fff;
|
|
603
|
+
border: 1px solid #666;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
|
|
607
|
+
/* Tooltip */
|
|
608
|
+
/* Base styles for the element that has a tooltip */
|
|
609
|
+
.leaflet-tooltip {
|
|
610
|
+
position: absolute;
|
|
611
|
+
padding: 6px;
|
|
612
|
+
background-color: #fff;
|
|
613
|
+
border: 1px solid #fff;
|
|
614
|
+
border-radius: 3px;
|
|
615
|
+
color: #222;
|
|
616
|
+
white-space: nowrap;
|
|
617
|
+
-webkit-user-select: none;
|
|
618
|
+
-moz-user-select: none;
|
|
619
|
+
-ms-user-select: none;
|
|
620
|
+
user-select: none;
|
|
621
|
+
pointer-events: none;
|
|
622
|
+
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
|
|
623
|
+
}
|
|
624
|
+
.leaflet-tooltip.leaflet-interactive {
|
|
625
|
+
cursor: pointer;
|
|
626
|
+
pointer-events: auto;
|
|
627
|
+
}
|
|
628
|
+
.leaflet-tooltip-top:before,
|
|
629
|
+
.leaflet-tooltip-bottom:before,
|
|
630
|
+
.leaflet-tooltip-left:before,
|
|
631
|
+
.leaflet-tooltip-right:before {
|
|
632
|
+
position: absolute;
|
|
633
|
+
pointer-events: none;
|
|
634
|
+
border: 6px solid transparent;
|
|
635
|
+
background: transparent;
|
|
636
|
+
content: "";
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
/* Directions */
|
|
640
|
+
|
|
641
|
+
.leaflet-tooltip-bottom {
|
|
642
|
+
margin-top: 6px;
|
|
643
|
+
}
|
|
644
|
+
.leaflet-tooltip-top {
|
|
645
|
+
margin-top: -6px;
|
|
646
|
+
}
|
|
647
|
+
.leaflet-tooltip-bottom:before,
|
|
648
|
+
.leaflet-tooltip-top:before {
|
|
649
|
+
left: 50%;
|
|
650
|
+
margin-left: -6px;
|
|
651
|
+
}
|
|
652
|
+
.leaflet-tooltip-top:before {
|
|
653
|
+
bottom: 0;
|
|
654
|
+
margin-bottom: -12px;
|
|
655
|
+
border-top-color: #fff;
|
|
656
|
+
}
|
|
657
|
+
.leaflet-tooltip-bottom:before {
|
|
658
|
+
top: 0;
|
|
659
|
+
margin-top: -12px;
|
|
660
|
+
margin-left: -6px;
|
|
661
|
+
border-bottom-color: #fff;
|
|
662
|
+
}
|
|
663
|
+
.leaflet-tooltip-left {
|
|
664
|
+
margin-left: -6px;
|
|
665
|
+
}
|
|
666
|
+
.leaflet-tooltip-right {
|
|
667
|
+
margin-left: 6px;
|
|
668
|
+
}
|
|
669
|
+
.leaflet-tooltip-left:before,
|
|
670
|
+
.leaflet-tooltip-right:before {
|
|
671
|
+
top: 50%;
|
|
672
|
+
margin-top: -6px;
|
|
673
|
+
}
|
|
674
|
+
.leaflet-tooltip-left:before {
|
|
675
|
+
right: 0;
|
|
676
|
+
margin-right: -12px;
|
|
677
|
+
border-left-color: #fff;
|
|
678
|
+
}
|
|
679
|
+
.leaflet-tooltip-right:before {
|
|
680
|
+
left: 0;
|
|
681
|
+
margin-left: -12px;
|
|
682
|
+
border-right-color: #fff;
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
/* Printing */
|
|
686
|
+
|
|
687
|
+
@media print {
|
|
688
|
+
/* Prevent printers from removing background-images of controls. */
|
|
689
|
+
.leaflet-control {
|
|
690
|
+
-webkit-print-color-adjust: exact;
|
|
691
|
+
print-color-adjust: exact;
|
|
692
|
+
}
|
|
693
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Studio
|
|
4
|
+
# /schedule — the app's booking page: Google Calendar's appointment page
|
|
5
|
+
# inline (studio/booking/_frame), inside the host's own layout.
|
|
6
|
+
#
|
|
7
|
+
# Public by design: it is where every "Schedule a call" link lands when the
|
|
8
|
+
# popup cannot open, so it skips the host's sign-in gate
|
|
9
|
+
# (mcritchie-industries and cyvasse gate every controller through
|
|
10
|
+
# Studio::ErrorHandling). It inherits the host's ApplicationController so the
|
|
11
|
+
# page renders in the app's layout, navbar and theme.
|
|
12
|
+
#
|
|
13
|
+
# Drawn only when the host opts in (Studio.draw_booking_routes). With no
|
|
14
|
+
# Studio.booking_url there is nothing to book, and it answers 404.
|
|
15
|
+
class BookingsController < ::ApplicationController
|
|
16
|
+
skip_before_action :require_authentication, raise: false
|
|
17
|
+
|
|
18
|
+
def show
|
|
19
|
+
head :not_found if Studio.booking_url.blank?
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|