rails_nexus 2.0.2 → 2.0.6
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/app/assets/javascripts/rails_nexus/controllers.js +21 -1
- data/app/assets/stylesheets/rails_nexus/application.css +295 -29
- data/app/controllers/rails_nexus/backup_controller.rb +6 -2
- data/app/javascript/controllers/rails_nexus_controller.js +2 -0
- data/app/javascript/controllers/rails_nexus_sidebar_controller.js +13 -0
- data/app/models/rails_nexus/backup_config.rb +77 -14
- data/app/services/rails_nexus/backup_service.rb +416 -97
- data/app/views/layouts/rails_nexus/_sidebar_navigation.html.erb +83 -0
- data/app/views/layouts/rails_nexus/application.html.erb +70 -22
- data/app/views/rails_nexus/backup/_form.html.erb +183 -37
- data/app/views/rails_nexus/logged_exceptions/_exceptions.html.erb +16 -15
- data/app/views/rails_nexus/logged_exceptions/index.html.erb +3 -3
- data/db/seeds/backup_configs.rb +139 -0
- data/lib/generators/rails_nexus/templates/migration.rb +59 -0
- data/lib/rails_nexus/version.rb +1 -1
- data/lib/tasks/rails_nexus.rake +10 -0
- metadata +3 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4210d9b64f2039e57601450447c13d86c04267be0e256936a29362d2c1a55cf0
|
|
4
|
+
data.tar.gz: 454c4e8a1dcf8ca764e92ebb27de1d3f9fd5111cfe428c291d07bcaae797c69a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a8238683c943a267cd49ad1fd9fce34735e056969396148a6cb91640afb73bfaafc7cd9f46e325a4735f9b751465f60bd74ad5be9b9ec322dfc391f016ee8e37
|
|
7
|
+
data.tar.gz: 3b47e65343f08ef0a63932af7619a61a9c629c40a5d961e5b5ee033b6c1c662b44e3650a69c5e1644afab4da24f415b70621f0ecdf3fab7788276530f75ad5d6
|
|
@@ -54,6 +54,20 @@
|
|
|
54
54
|
if (this.hasDrawerTarget) this.drawerTarget.classList.remove("open")
|
|
55
55
|
if (this.hasOverlayTarget) this.overlayTarget.classList.remove("open")
|
|
56
56
|
}
|
|
57
|
+
|
|
58
|
+
toggleShortcuts(event) {
|
|
59
|
+
var dialog = document.querySelector("[data-rails_nexus-target='shortcutsDialog']")
|
|
60
|
+
if (!dialog) return
|
|
61
|
+
|
|
62
|
+
var isOpening = !dialog.classList.contains("open")
|
|
63
|
+
dialog.classList.toggle("open", isOpening)
|
|
64
|
+
event.currentTarget.setAttribute("aria-expanded", isOpening.toString())
|
|
65
|
+
|
|
66
|
+
if (isOpening) {
|
|
67
|
+
var closeButton = dialog.querySelector("button")
|
|
68
|
+
if (closeButton) closeButton.focus()
|
|
69
|
+
}
|
|
70
|
+
}
|
|
57
71
|
}
|
|
58
72
|
|
|
59
73
|
|
|
@@ -277,11 +291,17 @@
|
|
|
277
291
|
this.closeShortcuts()
|
|
278
292
|
} else {
|
|
279
293
|
this.shortcutsDialogTarget.classList.add("open")
|
|
294
|
+
var button = document.getElementById("rn-shortcuts-button")
|
|
295
|
+
if (button) button.setAttribute("aria-expanded", "true")
|
|
280
296
|
}
|
|
281
297
|
}
|
|
282
298
|
|
|
283
299
|
closeShortcuts() {
|
|
284
|
-
if (this.hasShortcutsDialogTarget)
|
|
300
|
+
if (this.hasShortcutsDialogTarget) {
|
|
301
|
+
this.shortcutsDialogTarget.classList.remove("open")
|
|
302
|
+
var button = document.getElementById("rn-shortcuts-button")
|
|
303
|
+
if (button) button.setAttribute("aria-expanded", "false")
|
|
304
|
+
}
|
|
285
305
|
}
|
|
286
306
|
|
|
287
307
|
// ─── Navigation (prev/next) ───────────────────────────────
|
|
@@ -1026,12 +1026,12 @@ code, pre { font-family: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", mon
|
|
|
1026
1026
|
/* ─── Sidebar ───────────────────────────────────────────────── */
|
|
1027
1027
|
.rn-sidebar {
|
|
1028
1028
|
width: 16rem;
|
|
1029
|
-
background: var(--rn-
|
|
1030
|
-
color: var(--rn-
|
|
1029
|
+
background: var(--rn-surface);
|
|
1030
|
+
color: var(--rn-text-secondary);
|
|
1031
1031
|
display: flex;
|
|
1032
1032
|
flex-direction: column;
|
|
1033
1033
|
flex-shrink: 0;
|
|
1034
|
-
border-right: 1px solid var(--rn-
|
|
1034
|
+
border-right: 1px solid var(--rn-border);
|
|
1035
1035
|
position: sticky;
|
|
1036
1036
|
top: 0;
|
|
1037
1037
|
height: 100vh;
|
|
@@ -1041,7 +1041,7 @@ code, pre { font-family: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", mon
|
|
|
1041
1041
|
|
|
1042
1042
|
.rn-sidebar-logo {
|
|
1043
1043
|
padding: 1rem;
|
|
1044
|
-
border-bottom: 1px solid var(--rn-
|
|
1044
|
+
border-bottom: 1px solid var(--rn-border);
|
|
1045
1045
|
display: flex;
|
|
1046
1046
|
align-items: center;
|
|
1047
1047
|
justify-content: space-between;
|
|
@@ -1061,10 +1061,25 @@ code, pre { font-family: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", mon
|
|
|
1061
1061
|
flex-shrink: 0;
|
|
1062
1062
|
}
|
|
1063
1063
|
.rn-logo-text {
|
|
1064
|
+
display: block;
|
|
1064
1065
|
font-size: 0.9375rem;
|
|
1065
1066
|
font-weight: 700;
|
|
1066
1067
|
letter-spacing: -0.01em;
|
|
1067
|
-
color:
|
|
1068
|
+
color: var(--rn-text);
|
|
1069
|
+
}
|
|
1070
|
+
.rn-logo-copy {
|
|
1071
|
+
display: flex;
|
|
1072
|
+
min-width: 0;
|
|
1073
|
+
flex-direction: column;
|
|
1074
|
+
line-height: 1.15;
|
|
1075
|
+
}
|
|
1076
|
+
.rn-logo-subtitle {
|
|
1077
|
+
margin-top: 0.2rem;
|
|
1078
|
+
color: var(--rn-text-muted);
|
|
1079
|
+
font-size: 0.625rem;
|
|
1080
|
+
font-weight: 500;
|
|
1081
|
+
letter-spacing: 0.04em;
|
|
1082
|
+
text-transform: uppercase;
|
|
1068
1083
|
}
|
|
1069
1084
|
|
|
1070
1085
|
.rn-sidebar-nav {
|
|
@@ -1075,8 +1090,26 @@ code, pre { font-family: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", mon
|
|
|
1075
1090
|
gap: 0.125rem;
|
|
1076
1091
|
overflow-y: auto;
|
|
1077
1092
|
}
|
|
1093
|
+
.rn-nav-section {
|
|
1094
|
+
display: flex;
|
|
1095
|
+
flex-direction: column;
|
|
1096
|
+
gap: 0.125rem;
|
|
1097
|
+
}
|
|
1098
|
+
.rn-nav-section + .rn-nav-section { margin-top: 0.75rem; }
|
|
1099
|
+
.rn-nav-section-label {
|
|
1100
|
+
display: block;
|
|
1101
|
+
margin: 0.625rem 0.75rem 0.25rem;
|
|
1102
|
+
color: var(--rn-text-muted);
|
|
1103
|
+
font-size: 0.625rem;
|
|
1104
|
+
font-weight: 700;
|
|
1105
|
+
letter-spacing: 0.1em;
|
|
1106
|
+
line-height: 1;
|
|
1107
|
+
text-transform: uppercase;
|
|
1108
|
+
}
|
|
1109
|
+
.rn-sidebar-nav > .rn-nav-section-label:not(:first-child) { margin-top: 1rem; }
|
|
1078
1110
|
|
|
1079
1111
|
.rn-nav-item {
|
|
1112
|
+
position: relative;
|
|
1080
1113
|
display: flex;
|
|
1081
1114
|
align-items: center;
|
|
1082
1115
|
gap: 0.625rem;
|
|
@@ -1084,19 +1117,30 @@ code, pre { font-family: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", mon
|
|
|
1084
1117
|
border-radius: 0.5rem;
|
|
1085
1118
|
font-size: 0.875rem;
|
|
1086
1119
|
font-weight: 500;
|
|
1087
|
-
color: var(--rn-
|
|
1120
|
+
color: var(--rn-text-secondary);
|
|
1088
1121
|
transition: all var(--rn-transition);
|
|
1089
1122
|
text-decoration: none;
|
|
1090
1123
|
}
|
|
1091
1124
|
.rn-nav-item:hover {
|
|
1092
|
-
color: var(--rn-
|
|
1093
|
-
background: var(--rn-
|
|
1125
|
+
color: var(--rn-text);
|
|
1126
|
+
background: var(--rn-surface-hover);
|
|
1094
1127
|
text-decoration: none;
|
|
1095
1128
|
}
|
|
1096
1129
|
.rn-nav-item.active {
|
|
1097
|
-
color:
|
|
1098
|
-
background: var(--rn-
|
|
1130
|
+
color: var(--rn-primary);
|
|
1131
|
+
background: var(--rn-primary-light);
|
|
1132
|
+
}
|
|
1133
|
+
.rn-nav-item.active::before {
|
|
1134
|
+
position: absolute;
|
|
1135
|
+
top: 0.625rem;
|
|
1136
|
+
bottom: 0.625rem;
|
|
1137
|
+
left: -0.75rem;
|
|
1138
|
+
width: 2px;
|
|
1139
|
+
border-radius: 999px;
|
|
1140
|
+
background: var(--rn-primary);
|
|
1141
|
+
content: "";
|
|
1099
1142
|
}
|
|
1143
|
+
.rn-nav-item svg { flex-shrink: 0; }
|
|
1100
1144
|
.rn-nav-item--muted {
|
|
1101
1145
|
font-size: 0.8125rem;
|
|
1102
1146
|
opacity: 0.8;
|
|
@@ -1110,22 +1154,38 @@ code, pre { font-family: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", mon
|
|
|
1110
1154
|
border-radius: 0.625rem;
|
|
1111
1155
|
font-size: 0.625rem;
|
|
1112
1156
|
font-weight: 600;
|
|
1113
|
-
background: var(--rn-
|
|
1114
|
-
color: var(--rn-
|
|
1157
|
+
background: var(--rn-bg-secondary);
|
|
1158
|
+
color: var(--rn-text-secondary);
|
|
1115
1159
|
line-height: 1.25;
|
|
1116
1160
|
}
|
|
1117
1161
|
.rn-sidebar-section-divider {
|
|
1118
1162
|
height: 1px;
|
|
1119
|
-
background: var(--rn-
|
|
1163
|
+
background: var(--rn-border);
|
|
1120
1164
|
margin: 0.5rem 0;
|
|
1121
1165
|
opacity: 0.5;
|
|
1122
1166
|
}
|
|
1123
1167
|
|
|
1124
1168
|
.rn-sidebar-footer {
|
|
1125
1169
|
padding: 0.75rem 1rem;
|
|
1126
|
-
border-top: 1px solid var(--rn-
|
|
1170
|
+
border-top: 1px solid var(--rn-border);
|
|
1171
|
+
display: flex;
|
|
1172
|
+
align-items: center;
|
|
1173
|
+
justify-content: space-between;
|
|
1174
|
+
gap: 0.75rem;
|
|
1127
1175
|
font-size: 0.6875rem;
|
|
1128
|
-
color:
|
|
1176
|
+
color: var(--rn-text-muted);
|
|
1177
|
+
}
|
|
1178
|
+
.rn-sidebar-status {
|
|
1179
|
+
display: inline-flex;
|
|
1180
|
+
align-items: center;
|
|
1181
|
+
gap: 0.375rem;
|
|
1182
|
+
}
|
|
1183
|
+
.rn-status-dot {
|
|
1184
|
+
width: 0.375rem;
|
|
1185
|
+
height: 0.375rem;
|
|
1186
|
+
border-radius: 999px;
|
|
1187
|
+
background: var(--rn-success);
|
|
1188
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--rn-success) 14%, transparent);
|
|
1129
1189
|
}
|
|
1130
1190
|
|
|
1131
1191
|
/* ─── Mobile Sidebar ────────────────────────────────────────── */
|
|
@@ -1134,7 +1194,9 @@ code, pre { font-family: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", mon
|
|
|
1134
1194
|
inset-y: 0;
|
|
1135
1195
|
left: 0;
|
|
1136
1196
|
width: 16rem;
|
|
1137
|
-
background: var(--rn-
|
|
1197
|
+
background: var(--rn-surface);
|
|
1198
|
+
display: flex;
|
|
1199
|
+
flex-direction: column;
|
|
1138
1200
|
z-index: 50;
|
|
1139
1201
|
transform: translateX(-100%);
|
|
1140
1202
|
transition: transform 200ms ease-out;
|
|
@@ -1168,6 +1230,63 @@ code, pre { font-family: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", mon
|
|
|
1168
1230
|
backdrop-filter: blur(8px);
|
|
1169
1231
|
background: color-mix(in srgb, var(--rn-surface) 85%, transparent);
|
|
1170
1232
|
}
|
|
1233
|
+
.rn-topbar-title,
|
|
1234
|
+
.rn-topbar-actions {
|
|
1235
|
+
display: flex;
|
|
1236
|
+
align-items: center;
|
|
1237
|
+
}
|
|
1238
|
+
.rn-topbar-title { gap: 0.625rem; }
|
|
1239
|
+
.rn-topbar-actions { gap: 0.375rem; }
|
|
1240
|
+
.rn-topbar-heading {
|
|
1241
|
+
display: block;
|
|
1242
|
+
color: var(--rn-text);
|
|
1243
|
+
font-size: 0.875rem;
|
|
1244
|
+
font-weight: 650;
|
|
1245
|
+
line-height: 1.1;
|
|
1246
|
+
}
|
|
1247
|
+
.rn-topbar-subtitle {
|
|
1248
|
+
display: block;
|
|
1249
|
+
margin-top: 0.15rem;
|
|
1250
|
+
color: var(--rn-text-muted);
|
|
1251
|
+
font-size: 0.6875rem;
|
|
1252
|
+
line-height: 1.1;
|
|
1253
|
+
}
|
|
1254
|
+
.rn-mobile-menu-button { display: none; }
|
|
1255
|
+
@media (max-width: 1023px) {
|
|
1256
|
+
.rn-mobile-menu-button { display: inline-flex; }
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
/* ─── Shell Footer ─────────────────────────────────────────── */
|
|
1260
|
+
.rn-footer {
|
|
1261
|
+
min-height: 3.25rem;
|
|
1262
|
+
padding: 0.75rem 1.5rem;
|
|
1263
|
+
border-top: 1px solid var(--rn-border-light);
|
|
1264
|
+
display: flex;
|
|
1265
|
+
align-items: center;
|
|
1266
|
+
justify-content: space-between;
|
|
1267
|
+
gap: 1rem;
|
|
1268
|
+
background: var(--rn-surface);
|
|
1269
|
+
color: var(--rn-text-muted);
|
|
1270
|
+
font-size: 0.75rem;
|
|
1271
|
+
}
|
|
1272
|
+
.rn-footer-version { color: var(--rn-text-secondary); }
|
|
1273
|
+
.rn-footer-credit,
|
|
1274
|
+
.rn-footer-github {
|
|
1275
|
+
display: inline-flex;
|
|
1276
|
+
align-items: center;
|
|
1277
|
+
gap: 0.375rem;
|
|
1278
|
+
}
|
|
1279
|
+
.rn-footer a { font-weight: 600; }
|
|
1280
|
+
@media (max-width: 639px) {
|
|
1281
|
+
.rn-topbar { padding: 0 1rem; }
|
|
1282
|
+
.rn-topbar-subtitle { display: none; }
|
|
1283
|
+
.rn-footer {
|
|
1284
|
+
align-items: flex-start;
|
|
1285
|
+
flex-direction: column;
|
|
1286
|
+
gap: 0.25rem;
|
|
1287
|
+
padding: 0.75rem 1rem;
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1171
1290
|
|
|
1172
1291
|
.rn-icon-btn {
|
|
1173
1292
|
display: inline-flex;
|
|
@@ -1594,26 +1713,44 @@ code, pre { font-family: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", mon
|
|
|
1594
1713
|
white-space: nowrap;
|
|
1595
1714
|
}
|
|
1596
1715
|
|
|
1716
|
+
.rn-exceptions-toolbar {
|
|
1717
|
+
min-height: 3.25rem;
|
|
1718
|
+
padding: 0.625rem 1rem;
|
|
1719
|
+
display: flex;
|
|
1720
|
+
align-items: center;
|
|
1721
|
+
justify-content: space-between;
|
|
1722
|
+
gap: 1rem;
|
|
1723
|
+
}
|
|
1724
|
+
.rn-exceptions-toolbar-summary,
|
|
1725
|
+
.rn-exceptions-toolbar-actions {
|
|
1726
|
+
display: flex;
|
|
1727
|
+
align-items: center;
|
|
1728
|
+
gap: 0.75rem;
|
|
1729
|
+
}
|
|
1597
1730
|
.rn-exceptions-table {
|
|
1598
1731
|
table-layout: fixed;
|
|
1599
|
-
min-width:
|
|
1600
|
-
}
|
|
1601
|
-
.rn-exceptions-table
|
|
1602
|
-
.rn-exceptions-table
|
|
1603
|
-
.rn-exceptions-table .rn-col-
|
|
1604
|
-
.rn-exceptions-table .rn-col-
|
|
1605
|
-
.rn-exceptions-table .rn-col-
|
|
1606
|
-
.rn-exceptions-table .rn-col-
|
|
1607
|
-
.rn-exceptions-table .rn-col-
|
|
1608
|
-
.rn-exceptions-table .rn-col-
|
|
1609
|
-
.rn-exceptions-table .rn-col-
|
|
1732
|
+
min-width: 64rem;
|
|
1733
|
+
}
|
|
1734
|
+
.rn-exceptions-table th,
|
|
1735
|
+
.rn-exceptions-table td { padding-right: 0.75rem; padding-left: 0.75rem; }
|
|
1736
|
+
.rn-exceptions-table .rn-col-severity { width: 1.5rem; padding-right: 0; }
|
|
1737
|
+
.rn-exceptions-table .rn-col-exception { width: 10.5rem; }
|
|
1738
|
+
.rn-exceptions-table .rn-col-platform { width: 5.5rem; }
|
|
1739
|
+
.rn-exceptions-table .rn-col-source { width: 10rem; }
|
|
1740
|
+
.rn-exceptions-table .rn-col-message { width: auto; }
|
|
1741
|
+
.rn-exceptions-table .rn-col-count { width: 4.5rem; text-align: center; }
|
|
1742
|
+
.rn-exceptions-table .rn-col-workflow { width: 10.5rem; }
|
|
1743
|
+
.rn-exceptions-table .rn-col-time { width: 6.5rem; }
|
|
1744
|
+
.rn-exceptions-table .rn-col-actions { width: 4.5rem; }
|
|
1610
1745
|
.rn-exceptions-table .rn-exception-name {
|
|
1611
1746
|
display: block;
|
|
1612
1747
|
overflow: hidden;
|
|
1748
|
+
color: var(--rn-text);
|
|
1613
1749
|
text-overflow: ellipsis;
|
|
1614
1750
|
white-space: nowrap;
|
|
1615
|
-
font-weight:
|
|
1751
|
+
font-weight: 650;
|
|
1616
1752
|
font-size: 0.8125rem;
|
|
1753
|
+
line-height: 1.35;
|
|
1617
1754
|
}
|
|
1618
1755
|
.rn-exceptions-table .rn-source {
|
|
1619
1756
|
display: flex;
|
|
@@ -1631,7 +1768,7 @@ code, pre { font-family: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", mon
|
|
|
1631
1768
|
overflow: hidden;
|
|
1632
1769
|
color: var(--rn-text-muted);
|
|
1633
1770
|
font-size: 0.6875rem;
|
|
1634
|
-
line-height: 1;
|
|
1771
|
+
line-height: 1.2;
|
|
1635
1772
|
text-overflow: ellipsis;
|
|
1636
1773
|
white-space: nowrap;
|
|
1637
1774
|
}
|
|
@@ -1642,18 +1779,147 @@ code, pre { font-family: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", mon
|
|
|
1642
1779
|
gap: 0.25rem;
|
|
1643
1780
|
}
|
|
1644
1781
|
.rn-exceptions-table .rn-workflow-state .rn-row-meta { flex-basis: 100%; }
|
|
1782
|
+
.rn-exceptions-table .rn-msg {
|
|
1783
|
+
max-width: none;
|
|
1784
|
+
display: -webkit-box;
|
|
1785
|
+
overflow: hidden;
|
|
1786
|
+
white-space: normal;
|
|
1787
|
+
line-height: 1.35;
|
|
1788
|
+
-webkit-box-orient: vertical;
|
|
1789
|
+
-webkit-line-clamp: 2;
|
|
1790
|
+
}
|
|
1791
|
+
.rn-severity-dot {
|
|
1792
|
+
display: block;
|
|
1793
|
+
width: 0.5rem;
|
|
1794
|
+
height: 0.5rem;
|
|
1795
|
+
margin-top: 0.3rem;
|
|
1796
|
+
border-radius: 999px;
|
|
1797
|
+
background: var(--rn-danger);
|
|
1798
|
+
box-shadow: 0 0 0 3px var(--rn-danger-light);
|
|
1799
|
+
}
|
|
1800
|
+
.rn-severity-warning { background: var(--rn-warning); box-shadow: 0 0 0 3px var(--rn-warning-light); }
|
|
1801
|
+
.rn-severity-info { background: var(--rn-info); box-shadow: 0 0 0 3px var(--rn-info-light); }
|
|
1802
|
+
.rn-occurrence-count {
|
|
1803
|
+
display: inline-flex;
|
|
1804
|
+
min-width: 1.75rem;
|
|
1805
|
+
height: 1.5rem;
|
|
1806
|
+
padding: 0 0.4rem;
|
|
1807
|
+
border: 1px solid var(--rn-border);
|
|
1808
|
+
border-radius: 999px;
|
|
1809
|
+
align-items: center;
|
|
1810
|
+
justify-content: center;
|
|
1811
|
+
background: var(--rn-bg-secondary);
|
|
1812
|
+
color: var(--rn-text-secondary);
|
|
1813
|
+
font-size: 0.6875rem;
|
|
1814
|
+
font-weight: 700;
|
|
1815
|
+
}
|
|
1816
|
+
.rn-row-actions {
|
|
1817
|
+
display: flex;
|
|
1818
|
+
align-items: center;
|
|
1819
|
+
justify-content: flex-end;
|
|
1820
|
+
gap: 0.125rem;
|
|
1821
|
+
opacity: 0.35;
|
|
1822
|
+
transition: opacity var(--rn-transition);
|
|
1823
|
+
}
|
|
1824
|
+
.rn-exceptions-table tr:hover .rn-row-actions,
|
|
1825
|
+
.rn-exceptions-table tr:focus-within .rn-row-actions,
|
|
1826
|
+
.rn-exceptions-table tr.selected .rn-row-actions { opacity: 1; }
|
|
1645
1827
|
.rn-exceptions-table tbody tr {
|
|
1646
1828
|
position: relative;
|
|
1647
1829
|
border-left: 3px solid transparent;
|
|
1830
|
+
outline: none;
|
|
1648
1831
|
}
|
|
1649
1832
|
.rn-exceptions-table tbody tr:hover {
|
|
1650
1833
|
border-left-color: var(--rn-primary);
|
|
1651
1834
|
}
|
|
1835
|
+
.rn-exceptions-table tbody tr:focus-visible {
|
|
1836
|
+
border-left-color: var(--rn-primary);
|
|
1837
|
+
box-shadow: inset 0 0 0 2px var(--rn-primary-ring);
|
|
1838
|
+
}
|
|
1652
1839
|
.rn-exceptions-table tbody tr.selected {
|
|
1653
1840
|
border-left-color: var(--rn-primary);
|
|
1654
1841
|
background: var(--rn-primary-light);
|
|
1655
1842
|
}
|
|
1656
1843
|
|
|
1844
|
+
@media (max-width: 1100px) {
|
|
1845
|
+
.rn-exceptions-table { display: block; min-width: 0; }
|
|
1846
|
+
.rn-exceptions-table thead { display: none; }
|
|
1847
|
+
.rn-exceptions-table tbody {
|
|
1848
|
+
padding: 0.75rem;
|
|
1849
|
+
display: grid;
|
|
1850
|
+
gap: 0.625rem;
|
|
1851
|
+
}
|
|
1852
|
+
.rn-exceptions-table tbody tr {
|
|
1853
|
+
padding: 0.875rem 0.875rem 0.875rem 0.75rem;
|
|
1854
|
+
border: 1px solid var(--rn-border-light);
|
|
1855
|
+
border-left: 3px solid transparent;
|
|
1856
|
+
border-radius: 0.625rem;
|
|
1857
|
+
display: grid;
|
|
1858
|
+
grid-template-columns: 0.5rem minmax(0, 1fr) auto auto;
|
|
1859
|
+
grid-template-areas:
|
|
1860
|
+
"severity exception exception actions"
|
|
1861
|
+
"severity message message message"
|
|
1862
|
+
"severity source source source"
|
|
1863
|
+
"severity platform count time"
|
|
1864
|
+
"severity workflow workflow workflow";
|
|
1865
|
+
column-gap: 0.75rem;
|
|
1866
|
+
row-gap: 0.5rem;
|
|
1867
|
+
background: var(--rn-surface);
|
|
1868
|
+
box-shadow: var(--rn-shadow-sm);
|
|
1869
|
+
}
|
|
1870
|
+
.rn-exceptions-table tbody tr:hover,
|
|
1871
|
+
.rn-exceptions-table tbody tr.selected {
|
|
1872
|
+
border-left-color: var(--rn-primary);
|
|
1873
|
+
background: var(--rn-surface-hover);
|
|
1874
|
+
}
|
|
1875
|
+
.rn-exceptions-table tbody tr.selected { box-shadow: 0 0 0 2px var(--rn-primary-ring); }
|
|
1876
|
+
.rn-exceptions-table td {
|
|
1877
|
+
width: auto !important;
|
|
1878
|
+
padding: 0;
|
|
1879
|
+
border: 0;
|
|
1880
|
+
min-width: 0;
|
|
1881
|
+
}
|
|
1882
|
+
.rn-exceptions-table .rn-col-severity { grid-area: severity; }
|
|
1883
|
+
.rn-exceptions-table .rn-col-exception { grid-area: exception; }
|
|
1884
|
+
.rn-exceptions-table .rn-col-platform { grid-area: platform; }
|
|
1885
|
+
.rn-exceptions-table .rn-col-source { grid-area: source; }
|
|
1886
|
+
.rn-exceptions-table .rn-col-message { grid-area: message; }
|
|
1887
|
+
.rn-exceptions-table .rn-col-count { grid-area: count; text-align: left; }
|
|
1888
|
+
.rn-exceptions-table .rn-col-workflow { grid-area: workflow; }
|
|
1889
|
+
.rn-exceptions-table .rn-col-time { grid-area: time; text-align: right; }
|
|
1890
|
+
.rn-exceptions-table .rn-col-actions { grid-area: actions; }
|
|
1891
|
+
.rn-exceptions-table .rn-exception-name { font-size: 0.875rem; }
|
|
1892
|
+
.rn-exceptions-table .rn-source::before {
|
|
1893
|
+
margin-right: 0.375rem;
|
|
1894
|
+
color: var(--rn-text-muted);
|
|
1895
|
+
content: "Source";
|
|
1896
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
1897
|
+
font-size: 0.6875rem;
|
|
1898
|
+
}
|
|
1899
|
+
.rn-exceptions-table .rn-row-actions { opacity: 1; }
|
|
1900
|
+
.rn-exceptions-table .rn-severity-dot { height: 100%; min-height: 1.5rem; margin-top: 0; }
|
|
1901
|
+
.rn-exceptions-table .rn-workflow-state { align-items: center; }
|
|
1902
|
+
}
|
|
1903
|
+
|
|
1904
|
+
@media (max-width: 639px) {
|
|
1905
|
+
.rn-exceptions-toolbar { align-items: flex-start; flex-direction: column; }
|
|
1906
|
+
.rn-exceptions-toolbar-summary { width: 100%; justify-content: space-between; }
|
|
1907
|
+
.rn-exceptions-toolbar-actions { width: 100%; justify-content: flex-end; }
|
|
1908
|
+
.rn-exceptions-toolbar-actions > span { display: none; }
|
|
1909
|
+
.rn-exceptions-table tbody { padding: 0.5rem; }
|
|
1910
|
+
.rn-exceptions-table tbody tr {
|
|
1911
|
+
grid-template-columns: 0.5rem minmax(0, 1fr) auto;
|
|
1912
|
+
grid-template-areas:
|
|
1913
|
+
"severity exception actions"
|
|
1914
|
+
"severity message message"
|
|
1915
|
+
"severity source source"
|
|
1916
|
+
"severity workflow workflow"
|
|
1917
|
+
"severity platform count"
|
|
1918
|
+
"severity time time";
|
|
1919
|
+
}
|
|
1920
|
+
.rn-exceptions-table .rn-col-time { text-align: left; }
|
|
1921
|
+
}
|
|
1922
|
+
|
|
1657
1923
|
/* ─── Row count indicator ───────────────────────────────────── */
|
|
1658
1924
|
.rn-count-indicator {
|
|
1659
1925
|
width: 1.5rem;
|
|
@@ -95,11 +95,15 @@ module RailsNexus
|
|
|
95
95
|
params.require(:backup_config).permit(
|
|
96
96
|
:name, :description, :database_name, :adapter, :host, :port,
|
|
97
97
|
:username, :password, :storage_path, :keep_count,
|
|
98
|
-
:compress, :
|
|
98
|
+
:compress, :encrypted, :encryption_password,
|
|
99
99
|
:rsync_enabled, :rsync_host, :rsync_port, :rsync_user, :rsync_path, :rsync_mirror,
|
|
100
100
|
:notify_command, :notify_on_success, :notify_on_failure,
|
|
101
101
|
:schedule_cron, :enabled,
|
|
102
|
-
|
|
102
|
+
:s3_enabled, :s3_access_key, :s3_secret_key, :s3_bucket, :s3_region, :s3_prefix,
|
|
103
|
+
:gpg_enabled, :gpg_password,
|
|
104
|
+
:email_notify, :email_to,
|
|
105
|
+
:archive_enabled, :bzip2_compress, :split_chunks,
|
|
106
|
+
skip_tables: [], archive_paths: [], archive_excludes: []
|
|
103
107
|
)
|
|
104
108
|
end
|
|
105
109
|
|
|
@@ -274,12 +274,14 @@ export default class extends Controller {
|
|
|
274
274
|
this.closeShortcuts()
|
|
275
275
|
} else {
|
|
276
276
|
this.shortcutsDialogTarget.classList.add("open")
|
|
277
|
+
document.getElementById("rn-shortcuts-button")?.setAttribute("aria-expanded", "true")
|
|
277
278
|
}
|
|
278
279
|
}
|
|
279
280
|
|
|
280
281
|
closeShortcuts() {
|
|
281
282
|
if (this.hasShortcutsDialogTarget) {
|
|
282
283
|
this.shortcutsDialogTarget.classList.remove("open")
|
|
284
|
+
document.getElementById("rn-shortcuts-button")?.setAttribute("aria-expanded", "false")
|
|
283
285
|
}
|
|
284
286
|
}
|
|
285
287
|
|
|
@@ -12,4 +12,17 @@ export default class extends Controller {
|
|
|
12
12
|
this.drawerTarget.classList.remove("open")
|
|
13
13
|
this.overlayTarget.classList.remove("open")
|
|
14
14
|
}
|
|
15
|
+
|
|
16
|
+
toggleShortcuts(event) {
|
|
17
|
+
const dialog = document.querySelector("[data-rails_nexus-target='shortcutsDialog']")
|
|
18
|
+
if (!dialog) return
|
|
19
|
+
|
|
20
|
+
const isOpening = !dialog.classList.contains("open")
|
|
21
|
+
dialog.classList.toggle("open", isOpening)
|
|
22
|
+
event.currentTarget.setAttribute("aria-expanded", isOpening.toString())
|
|
23
|
+
|
|
24
|
+
if (isOpening) {
|
|
25
|
+
dialog.querySelector("button")?.focus()
|
|
26
|
+
}
|
|
27
|
+
}
|
|
15
28
|
}
|