easyfaa 0.20.0 → 0.90.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 +6 -549
- data/MIT-LICENSE +1 -3
- data/README.md +17 -234
- data/exe/faa +4 -0
- data/lib/easyfaa/cli.rb +65 -0
- data/lib/easyfaa/version.rb +2 -2
- data/lib/easyfaa.rb +6 -36
- metadata +15 -227
- data/app/views/layouts/easyfaa.html.erb +0 -24
- data/app/views/recourses/_head.html.erb +0 -3
- data/art/autopilot.svg +0 -9
- data/art/cube.svg +0 -9
- data/art/design.svg +0 -8
- data/art/down.html.erb +0 -95
- data/art/easyfaa.svg +0 -7
- data/art/fountain.svg +0 -9
- data/art/goldrush.svg +0 -7
- data/art/houston.svg +0 -8
- data/art/icons.txt +0 -185
- data/art/index.html.erb +0 -157
- data/config/locales/easyfaa.en.yml +0 -7
- data/lib/easyfaa/copy.rb +0 -5
- data/lib/easyfaa/down.rb +0 -19
- data/lib/easyfaa/engine.rb +0 -53
- data/lib/easyfaa/helpers/flows.rb +0 -53
- data/lib/easyfaa/helpers/heads.rb +0 -60
- data/lib/easyfaa/helpers/logos.rb +0 -43
- data/lib/easyfaa/helpers.rb +0 -11
- data/lib/easyfaa/marks.rb +0 -16
- data/public/404.html +0 -118
- data/public/_headers +0 -28
- data/public/bh/css/bh.css +0 -1
- data/public/bh/js/bh.js +0 -152
- data/public/bh/theme/bootstrap.css +0 -10
- data/public/bh/theme/dawn.css +0 -189
- data/public/bh/theme/dracula.css +0 -189
- data/public/bh/theme/gruvbox.css +0 -189
- data/public/bh/theme/monokai.css +0 -190
- data/public/bh/theme/nord.css +0 -189
- data/public/bh/theme/one_dark.css +0 -189
- data/public/bh/theme/solarized.css +0 -188
- data/public/bh/theme/tokyo_night.css +0 -189
- data/public/css/easyfaa.css +0 -1
- data/public/down/autopilot.html +0 -87
- data/public/down/cube.html +0 -87
- data/public/down/design.html +0 -87
- data/public/down/easyfaa.html +0 -84
- data/public/down/fountain.html +0 -87
- data/public/down/goldrush.html +0 -87
- data/public/down/houston.html +0 -87
- data/public/favicon/autopilot-180.png +0 -0
- data/public/favicon/autopilot-192.png +0 -0
- data/public/favicon/autopilot-512.png +0 -0
- data/public/favicon/autopilot-96.png +0 -0
- data/public/favicon/autopilot-dev.svg +0 -9
- data/public/favicon/autopilot.ico +0 -0
- data/public/favicon/autopilot.svg +0 -9
- data/public/favicon/autopilot.webmanifest +0 -12
- data/public/favicon/cube-180.png +0 -0
- data/public/favicon/cube-192.png +0 -0
- data/public/favicon/cube-512.png +0 -0
- data/public/favicon/cube-96.png +0 -0
- data/public/favicon/cube-dev.svg +0 -9
- data/public/favicon/cube.ico +0 -0
- data/public/favicon/cube.svg +0 -9
- data/public/favicon/cube.webmanifest +0 -12
- data/public/favicon/design-180.png +0 -0
- data/public/favicon/design-192.png +0 -0
- data/public/favicon/design-512.png +0 -0
- data/public/favicon/design-96.png +0 -0
- data/public/favicon/design-dev.svg +0 -8
- data/public/favicon/design.ico +0 -0
- data/public/favicon/design.svg +0 -8
- data/public/favicon/design.webmanifest +0 -12
- data/public/favicon/easyfaa-180.png +0 -0
- data/public/favicon/easyfaa-192.png +0 -0
- data/public/favicon/easyfaa-512.png +0 -0
- data/public/favicon/easyfaa-96.png +0 -0
- data/public/favicon/easyfaa-dev.svg +0 -7
- data/public/favicon/easyfaa.ico +0 -0
- data/public/favicon/easyfaa.svg +0 -7
- data/public/favicon/easyfaa.webmanifest +0 -12
- data/public/favicon/fountain-180.png +0 -0
- data/public/favicon/fountain-192.png +0 -0
- data/public/favicon/fountain-512.png +0 -0
- data/public/favicon/fountain-96.png +0 -0
- data/public/favicon/fountain-dev.svg +0 -9
- data/public/favicon/fountain.ico +0 -0
- data/public/favicon/fountain.svg +0 -9
- data/public/favicon/fountain.webmanifest +0 -12
- data/public/favicon/goldrush-180.png +0 -0
- data/public/favicon/goldrush-192.png +0 -0
- data/public/favicon/goldrush-512.png +0 -0
- data/public/favicon/goldrush-96.png +0 -0
- data/public/favicon/goldrush-dev.svg +0 -7
- data/public/favicon/goldrush.ico +0 -0
- data/public/favicon/goldrush.svg +0 -7
- data/public/favicon/goldrush.webmanifest +0 -12
- data/public/favicon/houston-180.png +0 -0
- data/public/favicon/houston-192.png +0 -0
- data/public/favicon/houston-512.png +0 -0
- data/public/favicon/houston-96.png +0 -0
- data/public/favicon/houston-dev.svg +0 -8
- data/public/favicon/houston.ico +0 -0
- data/public/favicon/houston.svg +0 -8
- data/public/favicon/houston.webmanifest +0 -12
- data/public/favicon.ico +0 -0
- data/public/font/bootstrap-icons-6LILWPE2.woff2 +0 -0
- data/public/font/bootstrap-icons-FRBPO3H7.woff2 +0 -0
- data/public/font/ibm-plex-sans-500-latin-LA7QXWWL.woff2 +0 -0
- data/public/font/ibm-plex-sans-500-latin-ext-X4QHZICY.woff2 +0 -0
- data/public/font/ibm-plex-sans-500-latin-ext.woff2 +0 -0
- data/public/font/ibm-plex-sans-500-latin.woff2 +0 -0
- data/public/font/ibm-plex-sans-500-vietnamese-24B6BSND.woff2 +0 -0
- data/public/font/ibm-plex-sans-500-vietnamese.woff2 +0 -0
- data/public/index.html +0 -165
- data/public/js/easyfaa.js +0 -1
- data/public/logo/autopilot.png +0 -0
- data/public/logo/autopilot.svg +0 -9
- data/public/logo/cube.png +0 -0
- data/public/logo/cube.svg +0 -9
- data/public/logo/design.png +0 -0
- data/public/logo/design.svg +0 -8
- data/public/logo/easyfaa.png +0 -0
- data/public/logo/easyfaa.svg +0 -7
- data/public/logo/fountain.png +0 -0
- data/public/logo/fountain.svg +0 -9
- data/public/logo/goldrush.png +0 -0
- data/public/logo/goldrush.svg +0 -7
- data/public/logo/houston.png +0 -0
- data/public/logo/houston.svg +0 -8
- data/public/page/400.html +0 -118
- data/public/page/404.html +0 -118
- data/public/page/406-unsupported-browser.html +0 -118
- data/public/page/422.html +0 -118
- data/public/page/500.html +0 -118
- data/public/site.webmanifest +0 -12
- data/public/theme/bootstrap.css +0 -10
- data/public/theme/dawn.css +0 -189
- data/public/theme/dracula.css +0 -189
- data/public/theme/gruvbox.css +0 -189
- data/public/theme/monokai.css +0 -190
- data/public/theme/nord.css +0 -189
- data/public/theme/one_dark.css +0 -189
- data/public/theme/solarized.css +0 -188
- data/public/theme/tokyo_night.css +0 -189
- data/public/v0.20.0/bh/css/bh.css +0 -1
- data/public/v0.20.0/bh/js/bh.js +0 -152
- data/public/v0.20.0/bh/theme/bootstrap.css +0 -10
- data/public/v0.20.0/bh/theme/dawn.css +0 -189
- data/public/v0.20.0/bh/theme/dracula.css +0 -189
- data/public/v0.20.0/bh/theme/gruvbox.css +0 -189
- data/public/v0.20.0/bh/theme/monokai.css +0 -190
- data/public/v0.20.0/bh/theme/nord.css +0 -189
- data/public/v0.20.0/bh/theme/one_dark.css +0 -189
- data/public/v0.20.0/bh/theme/solarized.css +0 -188
- data/public/v0.20.0/bh/theme/tokyo_night.css +0 -189
- data/public/v0.20.0/css/easyfaa.css +0 -1
- data/public/v0.20.0/font/bootstrap-icons-FRBPO3H7.woff2 +0 -0
- data/public/v0.20.0/font/ibm-plex-sans-500-latin-LA7QXWWL.woff2 +0 -0
- data/public/v0.20.0/font/ibm-plex-sans-500-latin-ext-X4QHZICY.woff2 +0 -0
- data/public/v0.20.0/font/ibm-plex-sans-500-latin-ext.woff2 +0 -0
- data/public/v0.20.0/font/ibm-plex-sans-500-latin.woff2 +0 -0
- data/public/v0.20.0/font/ibm-plex-sans-500-vietnamese-24B6BSND.woff2 +0 -0
- data/public/v0.20.0/font/ibm-plex-sans-500-vietnamese.woff2 +0 -0
- data/public/v0.20.0/js/easyfaa.js +0 -1
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang='en'>
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset='utf-8'>
|
|
5
|
-
<title><%= content_for(:title) || Easyfaa.app %></title>
|
|
6
|
-
<%- if protect_against_forgery? -%>
|
|
7
|
-
<meta name='csrf-param' content='<%= request_forgery_protection_token %>'>
|
|
8
|
-
<meta name='csrf-token' content='<%= form_authenticity_token %>'>
|
|
9
|
-
<%- end -%>
|
|
10
|
-
<%- if (csp = csp_meta_tag) -%>
|
|
11
|
-
<%= csp %>
|
|
12
|
-
<%- end -%>
|
|
13
|
-
<%= easyfaa_head_tags content_for(:logo).presence || Easyfaa.app %>
|
|
14
|
-
<%- if content_for?(:head) -%>
|
|
15
|
-
<%= yield :head %>
|
|
16
|
-
<%- end -%>
|
|
17
|
-
</head>
|
|
18
|
-
<body class='house-page d-flex flex-column'>
|
|
19
|
-
<main class='container-fluid py-4 flex-grow-1 d-flex flex-column'>
|
|
20
|
-
<%= content_for?(:content) ? yield(:content) : yield %>
|
|
21
|
-
</main>
|
|
22
|
-
<%= toasts %>
|
|
23
|
-
</body>
|
|
24
|
-
</html>
|
data/art/autopilot.svg
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
-
<g fill="none" stroke="#5aa9e6" stroke-width="28" stroke-linecap="round" stroke-linejoin="round">
|
|
3
|
-
<circle cx="256" cy="256" r="190"/>
|
|
4
|
-
<path d="M66 256 L206 256"/>
|
|
5
|
-
<path d="M306 256 L446 256"/>
|
|
6
|
-
<path d="M256 306 L256 446"/>
|
|
7
|
-
<circle cx="256" cy="256" r="50"/>
|
|
8
|
-
</g>
|
|
9
|
-
</svg>
|
data/art/cube.svg
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
-
<g fill="none" stroke="#5aa9e6" stroke-width="28" stroke-linecap="round" stroke-linejoin="round">
|
|
3
|
-
<path d="M256 302Q256 256 295.8 233L406.2 169.3Q446 146.3 446 192.3V319.7Q446 365.7 406.2 388.7L295.8 452.4Q256 475.4 256 429.4Z" fill="#0b1e3a"/>
|
|
4
|
-
<path d="M216.2 59.6Q256 36.6 295.8 59.6L406.2 123.3Q446 146.3 446 192.3V319.7Q446 365.7 406.2 388.7L295.8 452.4Q256 475.4 216.2 452.4L105.8 388.7Q66 365.7 66 319.7V192.3Q66 146.3 105.8 123.3Z"/>
|
|
5
|
-
<path d="M256 256 95.4 163.3"/>
|
|
6
|
-
<path d="M256 256 416.6 163.3"/>
|
|
7
|
-
<path d="M256 256V441.4"/>
|
|
8
|
-
</g>
|
|
9
|
-
</svg>
|
data/art/design.svg
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
-
<g fill="none" stroke="#5aa9e6" stroke-width="28" stroke-linecap="round" stroke-linejoin="round" transform="rotate(45 256 256)">
|
|
3
|
-
<path d="M196 60 L316 60 L316 372 L196 372 Z"/>
|
|
4
|
-
<path d="M196 120 L316 120"/>
|
|
5
|
-
<path d="M196 372 L256 470 L316 372"/>
|
|
6
|
-
<path d="M232 431 L256 470 L280 431 Z" fill="#0b1e3a"/>
|
|
7
|
-
</g>
|
|
8
|
-
</svg>
|
data/art/down.html.erb
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
<%# The page an app shows while it is down: its own mark and name in the middle, the house's
|
|
2
|
-
at the foot — or the house's alone, for an app not in the family — and nothing that
|
|
3
|
-
needs the app to be up — IBM Plex Sans and the icons from the design site, the two
|
|
4
|
-
blues written in. Rendered per app by `rake pages` into
|
|
5
|
-
public/down/<app>.html, and answered at /down.html by the engine once the host has named
|
|
6
|
-
itself in `Easyfaa.app`. -%>
|
|
7
|
-
<!doctype html>
|
|
8
|
-
<html lang='en'>
|
|
9
|
-
<head>
|
|
10
|
-
<meta charset='utf-8'>
|
|
11
|
-
<meta name='viewport' content='width=device-width, initial-scale=1'>
|
|
12
|
-
<title><%= app %></title>
|
|
13
|
-
<meta name='color-scheme' content='light dark'>
|
|
14
|
-
<link rel='icon' href='https://design.easyfaa.com/favicon/<%= app %>.svg' type='image/svg+xml'>
|
|
15
|
-
<link rel='icon' href='https://design.easyfaa.com/favicon/<%= app %>-96.png' type='image/png' sizes='96x96'>
|
|
16
|
-
<link rel='apple-touch-icon' href='https://design.easyfaa.com/favicon/<%= app %>-180.png'>
|
|
17
|
-
<style>
|
|
18
|
-
@font-face {
|
|
19
|
-
font-family: 'IBM Plex Sans'; font-style: normal; font-weight: 500; font-display: swap;
|
|
20
|
-
src: url('https://design.easyfaa.com/font/ibm-plex-sans-500-vietnamese.woff2') format('woff2');
|
|
21
|
-
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
|
22
|
-
}
|
|
23
|
-
@font-face {
|
|
24
|
-
font-family: 'IBM Plex Sans'; font-style: normal; font-weight: 500; font-display: swap;
|
|
25
|
-
src: url('https://design.easyfaa.com/font/ibm-plex-sans-500-latin-ext.woff2') format('woff2');
|
|
26
|
-
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
|
27
|
-
}
|
|
28
|
-
@font-face {
|
|
29
|
-
font-family: 'IBM Plex Sans'; font-style: normal; font-weight: 500; font-display: swap;
|
|
30
|
-
src: url('https://design.easyfaa.com/font/ibm-plex-sans-500-latin.woff2') format('woff2');
|
|
31
|
-
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
32
|
-
}
|
|
33
|
-
:root {
|
|
34
|
-
--bg: #fbfcfe;
|
|
35
|
-
--ink: #0b1e3a;
|
|
36
|
-
--mark: #5aa9e6;
|
|
37
|
-
}
|
|
38
|
-
@media (prefers-color-scheme: dark) {
|
|
39
|
-
:root {
|
|
40
|
-
--bg: #0f1622;
|
|
41
|
-
--ink: #cfe3f6;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
* { box-sizing: border-box; }
|
|
45
|
-
body {
|
|
46
|
-
margin: 0;
|
|
47
|
-
min-height: 100svh;
|
|
48
|
-
display: flex;
|
|
49
|
-
flex-direction: column;
|
|
50
|
-
background: var(--bg);
|
|
51
|
-
font-family: 'IBM Plex Sans', 'Helvetica Neue', Arial, sans-serif;
|
|
52
|
-
font-weight: 500;
|
|
53
|
-
letter-spacing: 0.01em;
|
|
54
|
-
}
|
|
55
|
-
main {
|
|
56
|
-
flex: 1;
|
|
57
|
-
display: grid;
|
|
58
|
-
place-items: center;
|
|
59
|
-
}
|
|
60
|
-
.lockup {
|
|
61
|
-
white-space: nowrap;
|
|
62
|
-
color: var(--ink);
|
|
63
|
-
line-height: 1;
|
|
64
|
-
}
|
|
65
|
-
/* The mark on the text baseline, sized and nudged by its own numbers, in ems so the
|
|
66
|
-
same pair reads right at both sizes on this page. */
|
|
67
|
-
.lockup svg {
|
|
68
|
-
position: relative;
|
|
69
|
-
vertical-align: baseline;
|
|
70
|
-
margin-right: 0.29em;
|
|
71
|
-
}
|
|
72
|
-
main .lockup { font-size: 48px; }
|
|
73
|
-
footer {
|
|
74
|
-
position: sticky;
|
|
75
|
-
bottom: 0;
|
|
76
|
-
background: var(--bg);
|
|
77
|
-
display: flex;
|
|
78
|
-
justify-content: center;
|
|
79
|
-
padding: 20px 0 26px;
|
|
80
|
-
}
|
|
81
|
-
footer .lockup { font-size: 20px; }
|
|
82
|
-
footer .easy { color: var(--mark); }
|
|
83
|
-
</style>
|
|
84
|
-
</head>
|
|
85
|
-
<body>
|
|
86
|
-
<main>
|
|
87
|
-
<p class='lockup'><%= mark[app] %><%= app == :easyfaa ? "<span class='easy'>easy</span>faa" : app %></p>
|
|
88
|
-
</main>
|
|
89
|
-
<%- unless app == :easyfaa -%>
|
|
90
|
-
<footer>
|
|
91
|
-
<p class='lockup'><%= mark[:easyfaa] %><span class='easy'>easy</span>faa</p>
|
|
92
|
-
</footer>
|
|
93
|
-
<%- end -%>
|
|
94
|
-
</body>
|
|
95
|
-
</html>
|
data/art/easyfaa.svg
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
-
<g fill="none" stroke="#5aa9e6" stroke-width="28" stroke-linecap="round" stroke-linejoin="round">
|
|
3
|
-
<path d="M74.5 340H437.5A200 200 0 0 1 74.5 340Z" fill="#0b1e3a" stroke="none"/>
|
|
4
|
-
<circle cx="256" cy="256" r="200"/>
|
|
5
|
-
<path d="M150 256H216L256 296L296 256H362"/>
|
|
6
|
-
</g>
|
|
7
|
-
</svg>
|
data/art/fountain.svg
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
-
<g fill="none" stroke="#5aa9e6" stroke-width="28" stroke-linecap="round">
|
|
3
|
-
<path d="M256 472V40"/>
|
|
4
|
-
<path d="M256 472C234 310 180 202 121 143"/>
|
|
5
|
-
<path d="M256 472C278 310 332 202 391 143"/>
|
|
6
|
-
<path d="M256 472C216 348 124 283 51 251"/>
|
|
7
|
-
<path d="M256 472C296 348 388 283 461 251"/>
|
|
8
|
-
</g>
|
|
9
|
-
</svg>
|
data/art/goldrush.svg
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
-
<g fill="none" stroke="#5aa9e6" stroke-width="28" stroke-linecap="round" stroke-linejoin="round">
|
|
3
|
-
<path d="M152 248 L190 128 L322 128 L360 248 Z"/>
|
|
4
|
-
<path d="M40 384 L78 264 L210 264 L248 384 Z"/>
|
|
5
|
-
<path d="M264 384 L302 264 L434 264 L472 384 Z"/>
|
|
6
|
-
</g>
|
|
7
|
-
</svg>
|
data/art/houston.svg
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
-
<g fill="none" stroke="#5aa9e6" stroke-width="28" stroke-linecap="round">
|
|
3
|
-
<circle cx="256" cy="256" r="224"/>
|
|
4
|
-
<path d="M32 256h448"/>
|
|
5
|
-
<path d="M256 32c142 63 142 385 0 448"/>
|
|
6
|
-
<path d="M256 32c-142 63-142 385 0 448"/>
|
|
7
|
-
</g>
|
|
8
|
-
</svg>
|
data/art/icons.txt
DELETED
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
# Every Bootstrap Icon a easyfaa page may draw: the ones unicon names for its concepts,
|
|
2
|
-
# and the few written out by name in recourse and here. The icon font and its stylesheet
|
|
3
|
-
# are cut down to these by rake icons; a name missing here is a blank box on a page.
|
|
4
|
-
airplane
|
|
5
|
-
alarm
|
|
6
|
-
archive
|
|
7
|
-
arrow-clockwise
|
|
8
|
-
arrow-counterclockwise
|
|
9
|
-
arrow-down
|
|
10
|
-
arrow-left
|
|
11
|
-
arrow-right
|
|
12
|
-
arrow-up
|
|
13
|
-
arrows-angle-contract
|
|
14
|
-
arrows-angle-expand
|
|
15
|
-
award
|
|
16
|
-
bag
|
|
17
|
-
bank
|
|
18
|
-
bar-chart
|
|
19
|
-
battery
|
|
20
|
-
bell
|
|
21
|
-
bicycle
|
|
22
|
-
book
|
|
23
|
-
bookmark
|
|
24
|
-
bookmark-fill
|
|
25
|
-
box
|
|
26
|
-
box-arrow-in-right
|
|
27
|
-
box-arrow-right
|
|
28
|
-
briefcase
|
|
29
|
-
brush
|
|
30
|
-
building
|
|
31
|
-
bus-front
|
|
32
|
-
c-circle
|
|
33
|
-
calendar
|
|
34
|
-
calendar-check
|
|
35
|
-
camera
|
|
36
|
-
camera-video
|
|
37
|
-
car-front
|
|
38
|
-
card-checklist
|
|
39
|
-
cart
|
|
40
|
-
cash
|
|
41
|
-
chat
|
|
42
|
-
check
|
|
43
|
-
check-circle
|
|
44
|
-
check-circle-fill
|
|
45
|
-
check2-square
|
|
46
|
-
chevron-down
|
|
47
|
-
chevron-left
|
|
48
|
-
chevron-right
|
|
49
|
-
chevron-up
|
|
50
|
-
circle
|
|
51
|
-
clipboard
|
|
52
|
-
clock
|
|
53
|
-
cloud
|
|
54
|
-
cloud-rain
|
|
55
|
-
collection-play
|
|
56
|
-
compass
|
|
57
|
-
copy
|
|
58
|
-
credit-card
|
|
59
|
-
dash
|
|
60
|
-
display
|
|
61
|
-
download
|
|
62
|
-
droplet
|
|
63
|
-
emoji-smile
|
|
64
|
-
envelope
|
|
65
|
-
exclamation-triangle
|
|
66
|
-
eye
|
|
67
|
-
eye-slash
|
|
68
|
-
file-earmark
|
|
69
|
-
file-earmark-text
|
|
70
|
-
fingerprint
|
|
71
|
-
fire
|
|
72
|
-
flag
|
|
73
|
-
folder
|
|
74
|
-
funnel
|
|
75
|
-
gear
|
|
76
|
-
geo
|
|
77
|
-
geo-alt
|
|
78
|
-
gift
|
|
79
|
-
globe
|
|
80
|
-
graph-up
|
|
81
|
-
grid
|
|
82
|
-
grip-vertical
|
|
83
|
-
hammer
|
|
84
|
-
hand-thumbs-down
|
|
85
|
-
hand-thumbs-up
|
|
86
|
-
hdd-rack
|
|
87
|
-
headphones
|
|
88
|
-
heart
|
|
89
|
-
hospital
|
|
90
|
-
hourglass
|
|
91
|
-
house
|
|
92
|
-
image
|
|
93
|
-
inbox
|
|
94
|
-
infinity
|
|
95
|
-
info-circle
|
|
96
|
-
key
|
|
97
|
-
keyboard
|
|
98
|
-
laptop
|
|
99
|
-
layout-sidebar
|
|
100
|
-
lightbulb
|
|
101
|
-
lightning
|
|
102
|
-
link
|
|
103
|
-
list
|
|
104
|
-
list-ul
|
|
105
|
-
lock
|
|
106
|
-
magic
|
|
107
|
-
map
|
|
108
|
-
megaphone
|
|
109
|
-
mic
|
|
110
|
-
moon
|
|
111
|
-
moon-fill
|
|
112
|
-
music-note
|
|
113
|
-
palette
|
|
114
|
-
paperclip
|
|
115
|
-
pause
|
|
116
|
-
pen
|
|
117
|
-
pencil
|
|
118
|
-
people
|
|
119
|
-
percent
|
|
120
|
-
person
|
|
121
|
-
person-circle
|
|
122
|
-
person-dash
|
|
123
|
-
person-plus
|
|
124
|
-
person-rolodex
|
|
125
|
-
person-vcard
|
|
126
|
-
phone
|
|
127
|
-
pie-chart
|
|
128
|
-
play
|
|
129
|
-
plus
|
|
130
|
-
power
|
|
131
|
-
printer
|
|
132
|
-
puzzle
|
|
133
|
-
qr-code
|
|
134
|
-
question-circle
|
|
135
|
-
receipt
|
|
136
|
-
repeat
|
|
137
|
-
reply
|
|
138
|
-
rulers
|
|
139
|
-
scissors
|
|
140
|
-
search
|
|
141
|
-
send
|
|
142
|
-
share
|
|
143
|
-
shield
|
|
144
|
-
shop
|
|
145
|
-
shuffle
|
|
146
|
-
signpost-split
|
|
147
|
-
skip-forward
|
|
148
|
-
sliders
|
|
149
|
-
snow
|
|
150
|
-
sort-down
|
|
151
|
-
sort-up
|
|
152
|
-
soundwave
|
|
153
|
-
speedometer
|
|
154
|
-
square
|
|
155
|
-
star
|
|
156
|
-
sticky
|
|
157
|
-
stop
|
|
158
|
-
stopwatch
|
|
159
|
-
sun
|
|
160
|
-
sun-fill
|
|
161
|
-
table
|
|
162
|
-
tag
|
|
163
|
-
telephone
|
|
164
|
-
terminal
|
|
165
|
-
three-dots
|
|
166
|
-
ticket
|
|
167
|
-
tools
|
|
168
|
-
train-front
|
|
169
|
-
trash
|
|
170
|
-
tree
|
|
171
|
-
trophy
|
|
172
|
-
truck
|
|
173
|
-
unlock
|
|
174
|
-
upc
|
|
175
|
-
upload
|
|
176
|
-
volume-up
|
|
177
|
-
wallet
|
|
178
|
-
wifi
|
|
179
|
-
window
|
|
180
|
-
wrench
|
|
181
|
-
x
|
|
182
|
-
x-circle
|
|
183
|
-
x-lg
|
|
184
|
-
zoom-in
|
|
185
|
-
zoom-out
|
data/art/index.html.erb
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang='en'>
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset='utf-8'>
|
|
5
|
-
<title>easyfaa design</title>
|
|
6
|
-
<meta name='viewport' content='width=device-width, initial-scale=1'>
|
|
7
|
-
<meta name='color-scheme' content='light dark'>
|
|
8
|
-
<meta name='description' content='Every asset a easyfaa app loads, and every component the easyfaa gem draws, in one place.'>
|
|
9
|
-
<link rel='icon' href='favicon/design.svg' type='image/svg+xml'>
|
|
10
|
-
<link rel='icon' href='favicon/design-96.png' type='image/png' sizes='96x96'>
|
|
11
|
-
<link rel='apple-touch-icon' href='favicon/design-180.png'>
|
|
12
|
-
<link rel='manifest' href='site.webmanifest'>
|
|
13
|
-
<!-- The same files every easyfaa page loads, under the version the head helper
|
|
14
|
-
pins a host to, so the page is drawn by the bytes it hands out rather than by
|
|
15
|
-
whatever was last built. Relative, so it reads the same on staging, on production
|
|
16
|
-
and from a folder on disk. -->
|
|
17
|
-
<link rel='stylesheet' href='v<%= version %>/bh/css/bh.css'>
|
|
18
|
-
<link rel='stylesheet' href='v<%= version %>/css/easyfaa.css'>
|
|
19
|
-
<link rel='stylesheet' href='v<%= version %>/bh/theme/bootstrap.css' data-recourse-theme=''>
|
|
20
|
-
<script type='module' src='v<%= version %>/bh/js/bh.js'></script>
|
|
21
|
-
<script type='module' src='v<%= version %>/js/easyfaa.js'></script>
|
|
22
|
-
<style>
|
|
23
|
-
/* The page's own chrome and nothing else: everything shown below is styled by
|
|
24
|
-
the pinned easyfaa.css alone, which is the point of showing it. */
|
|
25
|
-
.design-section { padding-block: 2rem; border-block-end: var(--bs-border-width) solid var(--bs-border-color); }
|
|
26
|
-
.design-section > p { max-width: 48rem; margin-inline: auto; }
|
|
27
|
-
.design-subsection { margin-block-start: 2.5rem; padding-block-start: 1.5rem; border-block-start: var(--bs-border-width) dashed var(--bs-border-color); }
|
|
28
|
-
.design-mark { width: 1.5rem; height: 1.5rem; }
|
|
29
|
-
.design-logo { width: 2.5rem; height: 2.5rem; }
|
|
30
|
-
.design-url { font-family: var(--bs-font-monospace); font-size: var(--bs-font-size-sm); color: var(--bs-fg-2); overflow-wrap: anywhere; }
|
|
31
|
-
.design-shell { height: 18rem; border: var(--bs-border-width) solid var(--bs-border-color); border-radius: var(--bs-radius-3); overflow: hidden; }
|
|
32
|
-
.design-shell .recourse-shell { height: 100%; }
|
|
33
|
-
.chat-thread { max-width: 36rem; margin-inline: auto; }
|
|
34
|
-
</style>
|
|
35
|
-
</head>
|
|
36
|
-
<body class='text-center'>
|
|
37
|
-
<header class='container-fluid px-3 py-3 border-bottom d-flex flex-wrap justify-content-center align-items-baseline gap-3'>
|
|
38
|
-
<a class='lockup plex' href='#'><svg aria-hidden='true' style='width: 1.0515em; height: 1.0515em; top: 0.18625em' viewBox='0 0 512 512'><g fill='none' stroke='#5aa9e6' stroke-width='28' stroke-linecap='round' stroke-linejoin='round' transform='rotate(45 256 256)'><path d='M196 60 L316 60 L316 372 L196 372 Z'/><path d='M196 120 L316 120'/><path d='M196 372 L256 470 L316 372'/><path d='M232 431 L256 470 L280 431 Z' fill='#0b1e3a'/></g></svg>design</a>
|
|
39
|
-
<nav class='fg-2'>the <a href='#lockup'>lockups</a>, <a href='#theme'>themes</a>, <a href='#page'>pages</a>, <a href='#favicon'>icons</a> shared by <a href='https://pro.houseaccount.com/bookings' title='Fountain'><img class='design-mark' src='logo/fountain.svg' alt='Fountain'></a> <a href='https://gold.houseaccount.com/specialty_matches' title='Goldrush'><img class='design-mark' src='logo/goldrush.svg' alt='Goldrush'></a> <a href='https://providers.houseaccount.com/providers' title='Houston'><img class='design-mark' src='logo/houston.svg' alt='Houston'></a> <a href='https://checkout.houseaccount.com/providers' title='Autopilot'><img class='design-mark' src='logo/autopilot.svg' alt='Autopilot'></a></nav>
|
|
40
|
-
</header>
|
|
41
|
-
|
|
42
|
-
<main class='container-fluid px-3'>
|
|
43
|
-
<section class='design-section'>
|
|
44
|
-
<h1 class='plex'>Multiple apps, same front-end</h1>
|
|
45
|
-
<div class='row g-3 mx-auto' style='max-width: 60rem'>
|
|
46
|
-
<div class='col-12 md:col-6'>
|
|
47
|
-
<div class='card p-3'>
|
|
48
|
-
<strong>Stylesheet</strong>
|
|
49
|
-
<a class='design-url' href='css/easyfaa.css'><span class='d-none sm:d-inline'>https://design.easyfaa.com/</span>css/easyfaa.css</a>
|
|
50
|
-
<span class='small fg-2 mt-1'>bh's Bootstrap 6, then the icon subset and the brand</span>
|
|
51
|
-
</div>
|
|
52
|
-
</div>
|
|
53
|
-
<div class='col-12 md:col-6'>
|
|
54
|
-
<div class='card p-3'>
|
|
55
|
-
<strong>Script</strong>
|
|
56
|
-
<a class='design-url' href='js/easyfaa.js'><span class='d-none sm:d-inline'>https://design.easyfaa.com/</span>js/easyfaa.js</a>
|
|
57
|
-
<span class='small fg-2 mt-1'>bh's bundle, and the controller that paints the wall</span>
|
|
58
|
-
</div>
|
|
59
|
-
</div>
|
|
60
|
-
<div class='col-12'>
|
|
61
|
-
<div class='card p-3'>
|
|
62
|
-
<strong>Pinned to a version — the latest is <%= version %></strong>
|
|
63
|
-
<span class='design-url'><a href='v<%= version %>/css/easyfaa.css'>v<%= version %>/css/easyfaa.css</a> · <a href='v<%= version %>/js/easyfaa.js'>v<%= version %>/js/easyfaa.js</a> · <a href='v<%= version %>/bh/theme/nord.css'>v<%= version %>/bh/theme/nord.css</a></span>
|
|
64
|
-
</div>
|
|
65
|
-
</div>
|
|
66
|
-
</div>
|
|
67
|
-
</section>
|
|
68
|
-
|
|
69
|
-
<section class='design-section' id='theme'>
|
|
70
|
-
<h2>Themes</h2>
|
|
71
|
-
<button type='button' class='btn btn-outline theme-primary' data-controller='scheme' data-action='scheme#rotate'
|
|
72
|
-
data-scheme-themes-value='["bootstrap","dawn","dracula","gruvbox","monokai","nord","one_dark","solarized","tokyo_night"]'
|
|
73
|
-
data-scheme-path-value='v<%= version %>/bh/theme' data-scheme-storage-value='recourse-scheme'>
|
|
74
|
-
<span class='recourse-scheme-light'><i class='bi bi-moon-fill'></i> Switch to dark</span>
|
|
75
|
-
<span class='recourse-scheme-dark'><i class='bi bi-sun-fill'></i> Switch to light</span>
|
|
76
|
-
</button>
|
|
77
|
-
</section>
|
|
78
|
-
|
|
79
|
-
<section class='design-section' id='lockup'>
|
|
80
|
-
<h2>Lockups</h2>
|
|
81
|
-
<p class='fg-2'>A mark beside its name, as one word and one link. Each drawing fills its 512 grid
|
|
82
|
-
differently, so equal sizes never align: every mark is rendered at a box of its own and pushed
|
|
83
|
-
down by its own nudge, and its ink then stands on the baseline and reaches IBM Plex Sans's ascender.
|
|
84
|
-
The two blues are the mark's rather than the theme's, so a lockup reads the same in every app.</p>
|
|
85
|
-
<div class='d-flex flex-wrap justify-content-center align-items-baseline gap-4 mt-3'>
|
|
86
|
-
<%- mark.each_key do |app| -%>
|
|
87
|
-
<a class='lockup plex' href='logo/<%= app %>.svg'><%= mark[app] %><%- if app == :easyfaa -%><span class='easy'>easy</span>faa<%- else -%><%= app %><%- end -%></a>
|
|
88
|
-
<%- end -%>
|
|
89
|
-
</div>
|
|
90
|
-
<p class='fg-2 mt-4 mb-0'>At three sizes, to show the seating holds:</p>
|
|
91
|
-
<div class='d-flex flex-wrap justify-content-center align-items-baseline gap-4 mt-2'>
|
|
92
|
-
<a class='lockup plex' href='#lockup' style='font-size: 14px'><%= mark[:fountain] %>fountain</a>
|
|
93
|
-
<a class='lockup plex' href='#lockup'><%= mark[:fountain] %>fountain</a>
|
|
94
|
-
<a class='lockup plex' href='#lockup' style='font-size: 34px'><%= mark[:fountain] %>fountain</a>
|
|
95
|
-
</div>
|
|
96
|
-
</section>
|
|
97
|
-
|
|
98
|
-
<section class='design-section' id='component'>
|
|
99
|
-
<h2>Components</h2>
|
|
100
|
-
<p class='fg-2'>They are not this gem's. The form that dresses every field, the combobox, the
|
|
101
|
-
6-digit code, the phone field, the dialog, the toasts, the thread of messages and the
|
|
102
|
-
twenty-two Stimulus controllers all live in <strong>bh</strong>, which is Bootstrap 6 for any
|
|
103
|
-
Rails app and has no opinion about this house. This gem depends on it and bundles it, so the
|
|
104
|
-
stylesheet and the script above already carry every one of them — and bh's own page draws each
|
|
105
|
-
beside the line of Ruby that produces it.</p>
|
|
106
|
-
<p class='mt-3'><a href='https://claudiob.github.io/bh/'>Bootstrap Helpers</a></p>
|
|
107
|
-
</section>
|
|
108
|
-
|
|
109
|
-
<section class='design-section' id='page'>
|
|
110
|
-
<h2>Error pages</h2>
|
|
111
|
-
<ul class='list-unstyled d-flex flex-wrap justify-content-center gap-3'>
|
|
112
|
-
<li><a href='page/400'>400 Bad request</a></li>
|
|
113
|
-
<li><a href='page/404'>404 Not found</a></li>
|
|
114
|
-
<li><a href='page/406-unsupported-browser'>406 Unsupported browser</a></li>
|
|
115
|
-
<li><a href='page/422'>422 Unprocessable</a></li>
|
|
116
|
-
<li><a href='page/500'>500 Server error</a></li>
|
|
117
|
-
</ul>
|
|
118
|
-
<h3 class='h5 design-subsection'>Down</h3>
|
|
119
|
-
<p class='fg-2'>What an app shows while it is down — its own mark in the middle, the house's at
|
|
120
|
-
the foot. The engine answers <code>/down.html</code> with the right one, and Heroku's
|
|
121
|
-
<code>MAINTENANCE_PAGE_URL</code> points here, where the app is not.</p>
|
|
122
|
-
<ul class='list-unstyled d-flex flex-wrap justify-content-center gap-3'>
|
|
123
|
-
<%- mark.each_key do |app| -%>
|
|
124
|
-
<li><a href='down/<%= app %>'><%= app %></a></li>
|
|
125
|
-
<%- end -%>
|
|
126
|
-
</ul>
|
|
127
|
-
</section>
|
|
128
|
-
|
|
129
|
-
<section class='design-section' id='favicon'>
|
|
130
|
-
<h2>Icons</h2>
|
|
131
|
-
<div class='table-responsive'>
|
|
132
|
-
<table class='table table-hover mx-auto' style='max-width: 60rem'>
|
|
133
|
-
<thead><tr><th scope='col'>Logo</th><th scope='col'>App</th><th scope='col'>.svg</th><th scope='col'>-dev.svg</th><th scope='col'>-96.png</th><th scope='col'>-180.png</th><th scope='col'>-192.png</th><th scope='col'>-512.png</th><th scope='col'>.ico</th><th scope='col'>.webmanifest</th></tr></thead>
|
|
134
|
-
<tbody>
|
|
135
|
-
<tr><td><img class='design-logo' src='logo/easyfaa.svg' alt=''></td><th scope='row'>easyfaa</th><td><img src='favicon/easyfaa.svg' width='24' alt=''></td><td><img src='favicon/easyfaa-dev.svg' width='24' alt=''></td><td><img src='favicon/easyfaa-96.png' width='24' alt=''></td><td><img src='favicon/easyfaa-180.png' width='24' alt=''></td><td><img src='favicon/easyfaa-192.png' width='24' alt=''></td><td><img src='favicon/easyfaa-512.png' width='24' alt=''></td><td><a href='favicon/easyfaa.ico'>ico</a></td><td><a href='favicon/easyfaa.webmanifest'>manifest</a></td></tr>
|
|
136
|
-
<tr><td><img class='design-logo' src='logo/cube.svg' alt=''></td><th scope='row'>cube</th><td><img src='favicon/cube.svg' width='24' alt=''></td><td><img src='favicon/cube-dev.svg' width='24' alt=''></td><td><img src='favicon/cube-96.png' width='24' alt=''></td><td><img src='favicon/cube-180.png' width='24' alt=''></td><td><img src='favicon/cube-192.png' width='24' alt=''></td><td><img src='favicon/cube-512.png' width='24' alt=''></td><td><a href='favicon/cube.ico'>ico</a></td><td><a href='favicon/cube.webmanifest'>manifest</a></td></tr>
|
|
137
|
-
<tr><td><img class='design-logo' src='logo/fountain.svg' alt=''></td><th scope='row'>fountain</th><td><img src='favicon/fountain.svg' width='24' alt=''></td><td><img src='favicon/fountain-dev.svg' width='24' alt=''></td><td><img src='favicon/fountain-96.png' width='24' alt=''></td><td><img src='favicon/fountain-180.png' width='24' alt=''></td><td><img src='favicon/fountain-192.png' width='24' alt=''></td><td><img src='favicon/fountain-512.png' width='24' alt=''></td><td><a href='favicon/fountain.ico'>ico</a></td><td><a href='favicon/fountain.webmanifest'>manifest</a></td></tr>
|
|
138
|
-
<tr><td><img class='design-logo' src='logo/goldrush.svg' alt=''></td><th scope='row'>goldrush</th><td><img src='favicon/goldrush.svg' width='24' alt=''></td><td><img src='favicon/goldrush-dev.svg' width='24' alt=''></td><td><img src='favicon/goldrush-96.png' width='24' alt=''></td><td><img src='favicon/goldrush-180.png' width='24' alt=''></td><td><img src='favicon/goldrush-192.png' width='24' alt=''></td><td><img src='favicon/goldrush-512.png' width='24' alt=''></td><td><a href='favicon/goldrush.ico'>ico</a></td><td><a href='favicon/goldrush.webmanifest'>manifest</a></td></tr>
|
|
139
|
-
<tr><td><img class='design-logo' src='logo/houston.svg' alt=''></td><th scope='row'>houston</th><td><img src='favicon/houston.svg' width='24' alt=''></td><td><img src='favicon/houston-dev.svg' width='24' alt=''></td><td><img src='favicon/houston-96.png' width='24' alt=''></td><td><img src='favicon/houston-180.png' width='24' alt=''></td><td><img src='favicon/houston-192.png' width='24' alt=''></td><td><img src='favicon/houston-512.png' width='24' alt=''></td><td><a href='favicon/houston.ico'>ico</a></td><td><a href='favicon/houston.webmanifest'>manifest</a></td></tr>
|
|
140
|
-
<tr><td><img class='design-logo' src='logo/design.svg' alt=''></td><th scope='row'>design</th><td><img src='favicon/design.svg' width='24' alt=''></td><td><img src='favicon/design-dev.svg' width='24' alt=''></td><td><img src='favicon/design-96.png' width='24' alt=''></td><td><img src='favicon/design-180.png' width='24' alt=''></td><td><img src='favicon/design-192.png' width='24' alt=''></td><td><img src='favicon/design-512.png' width='24' alt=''></td><td><a href='favicon/design.ico'>ico</a></td><td><a href='favicon/design.webmanifest'>manifest</a></td></tr>
|
|
141
|
-
<tr><td><img class='design-logo' src='logo/autopilot.svg' alt=''></td><th scope='row'>autopilot</th><td><img src='favicon/autopilot.svg' width='24' alt=''></td><td><img src='favicon/autopilot-dev.svg' width='24' alt=''></td><td><img src='favicon/autopilot-96.png' width='24' alt=''></td><td><img src='favicon/autopilot-180.png' width='24' alt=''></td><td><img src='favicon/autopilot-192.png' width='24' alt=''></td><td><img src='favicon/autopilot-512.png' width='24' alt=''></td><td><a href='favicon/autopilot.ico'>ico</a></td><td><a href='favicon/autopilot.webmanifest'>manifest</a></td></tr>
|
|
142
|
-
</tbody>
|
|
143
|
-
</table>
|
|
144
|
-
</div>
|
|
145
|
-
</section>
|
|
146
|
-
</main>
|
|
147
|
-
|
|
148
|
-
<footer class='container-fluid px-3 py-4 small fg-2 d-flex flex-column align-items-center gap-2'>
|
|
149
|
-
<code>gem install easyfaa</code>
|
|
150
|
-
<div class='d-flex flex-wrap justify-content-center gap-3'>
|
|
151
|
-
<a href='https://github.com/easyfaa/design'>Source</a>
|
|
152
|
-
<a href='https://rubydoc.info/gems/easyfaa'>Reference</a>
|
|
153
|
-
<a href='https://rubygems.org/gems/easyfaa'>RubyGems</a>
|
|
154
|
-
</div>
|
|
155
|
-
</footer>
|
|
156
|
-
</body>
|
|
157
|
-
</html>
|
data/lib/easyfaa/copy.rb
DELETED
data/lib/easyfaa/down.rb
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
require 'rack/files'
|
|
2
|
-
|
|
3
|
-
module Easyfaa
|
|
4
|
-
# Answers `/down.html` with the page the host shows while it is down: its own where it is
|
|
5
|
-
# one of the family, the house's otherwise.
|
|
6
|
-
class Down
|
|
7
|
-
def initialize(app)
|
|
8
|
-
@app = app
|
|
9
|
-
@files = Rack::Files.new Engine.root.join('public/down').to_s
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# The page where the path asks for it, and the host otherwise.
|
|
13
|
-
def call(env)
|
|
14
|
-
return @app.call env unless env['PATH_INFO'] == '/down.html'
|
|
15
|
-
|
|
16
|
-
@files.call env.merge('PATH_INFO' => "/#{Easyfaa.app}.html")
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
data/lib/easyfaa/engine.rb
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# rails/engine alone raises NoMethodError: railtie.rb calls delegate_missing_to too early.
|
|
2
|
-
require 'rails'
|
|
3
|
-
|
|
4
|
-
module Easyfaa
|
|
5
|
-
# Hooks the gem into a host app: serves its files, its error pages and its helpers.
|
|
6
|
-
class Engine < ::Rails::Engine
|
|
7
|
-
# The folders the design site publishes, served from this gem at the same paths so a
|
|
8
|
-
# page on an app and a page on the site link one file — this version's copy under its
|
|
9
|
-
# own prefix among them. Each keeps its slash: `Rack::Static` matches on `start_with?`,
|
|
10
|
-
# and `/page` would swallow `/pages` itself.
|
|
11
|
-
PREFIXES = %W[/css/ /js/ /theme/ /font/ /logo/ /favicon/ /page/ /v#{VERSION}/].freeze
|
|
12
|
-
|
|
13
|
-
# An unversioned file is asked for again on every full load and answered `304 Not
|
|
14
|
-
# Modified` while it stands, since its URL never changes between versions. A font, whose
|
|
15
|
-
# name carries a hash of its bytes, and anything under this version's prefix never change
|
|
16
|
-
# at all, so a browser may keep them for good.
|
|
17
|
-
HEADERS = [
|
|
18
|
-
[:all, { 'cache-control' => 'no-cache' }],
|
|
19
|
-
['/font/', { 'cache-control' => 'public, max-age=31536000, immutable' }],
|
|
20
|
-
['/v', { 'cache-control' => 'public, max-age=31536000, immutable' }],
|
|
21
|
-
].freeze
|
|
22
|
-
|
|
23
|
-
# What a file is kept for while the gem is being worked on: not at all, since the
|
|
24
|
-
# version's copy is rewritten under the same name until it is released, and a browser
|
|
25
|
-
# told to keep it for a year would show yesterday's stylesheet on today's page.
|
|
26
|
-
DEVELOPMENT_HEADERS = HEADERS.first 1
|
|
27
|
-
|
|
28
|
-
# Before `Rails::Rack::Logger`, so fetching a stylesheet writes no `Started GET` line, and
|
|
29
|
-
# cascading, so a host route under one of these prefixes still answers.
|
|
30
|
-
initializer 'easyfaa.assets' do |app|
|
|
31
|
-
headers = Rails.env.development? ? DEVELOPMENT_HEADERS : HEADERS
|
|
32
|
-
app.middleware.insert_before Rails::Rack::Logger, Rack::Static,
|
|
33
|
-
urls: PREFIXES, root: Engine.root.join('public').to_s,
|
|
34
|
-
header_rules: headers, cascade: true
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# The branded error pages, read by status from `public/page` the way Rails reads a host's
|
|
38
|
-
# own `public/`, unless the host has already named an app of its own.
|
|
39
|
-
initializer 'easyfaa.exceptions' do |app|
|
|
40
|
-
app.config.exceptions_app ||=
|
|
41
|
-
ActionDispatch::PublicExceptions.new Engine.root.join('public/page').to_s
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# The page a host shows while it is down, at the path Heroku and a reader expect.
|
|
45
|
-
initializer 'easyfaa.down' do |app|
|
|
46
|
-
app.middleware.insert_before Rails::Rack::Logger, Down
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
initializer 'easyfaa.helpers' do
|
|
50
|
-
ActiveSupport.on_load(:action_view) { include Easyfaa::Helpers }
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|