oxidized-web 0.13.1 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of oxidized-web might be problematic. Click here for more details.

Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.github/PULL_REQUEST_TEMPLATE.md +12 -0
  3. data/.github/dependabot.yml +25 -0
  4. data/.github/workflows/codeql.yml +76 -0
  5. data/.github/workflows/ruby.yml +41 -0
  6. data/.github/workflows/stale.yml +20 -0
  7. data/.gitignore +3 -0
  8. data/.rubocop.yml +38 -3
  9. data/.rubocop_todo.yml +27 -211
  10. data/CHANGELOG.md +46 -0
  11. data/README.md +8 -5
  12. data/Rakefile +49 -5
  13. data/docs/development.md +182 -0
  14. data/lib/oxidized/web/public/css/oxidized.css +59 -0
  15. data/lib/oxidized/web/public/scripts/oxidized.js +1 -48
  16. data/lib/oxidized/web/public/weblibs/bootstrap-icons.css +2078 -0
  17. data/lib/oxidized/web/public/weblibs/bootstrap.bundle.js +6314 -0
  18. data/lib/oxidized/web/public/weblibs/bootstrap.bundle.js.map +1 -0
  19. data/lib/oxidized/web/public/weblibs/bootstrap.css +12057 -0
  20. data/lib/oxidized/web/public/weblibs/bootstrap.css.map +1 -0
  21. data/lib/oxidized/web/public/weblibs/bootstrap.js +4494 -0
  22. data/lib/oxidized/web/public/weblibs/bootstrap.js.map +1 -0
  23. data/lib/oxidized/web/public/weblibs/buttons.bootstrap5.css +395 -0
  24. data/lib/oxidized/web/public/weblibs/buttons.bootstrap5.js +114 -0
  25. data/lib/oxidized/web/public/weblibs/buttons.colVis.js +256 -0
  26. data/lib/oxidized/web/public/weblibs/dataTables.bootstrap5.css +517 -0
  27. data/lib/oxidized/web/public/weblibs/dataTables.bootstrap5.js +122 -0
  28. data/lib/oxidized/web/public/weblibs/dataTables.buttons.js +2936 -0
  29. data/lib/oxidized/web/public/weblibs/dataTables.js +13843 -0
  30. data/lib/oxidized/web/public/weblibs/fonts/bootstrap-icons.woff +0 -0
  31. data/lib/oxidized/web/public/weblibs/fonts/bootstrap-icons.woff2 +0 -0
  32. data/lib/oxidized/web/public/weblibs/jquery.js +10716 -0
  33. data/lib/oxidized/web/version.rb +7 -0
  34. data/lib/oxidized/web/views/conf_search.haml +14 -13
  35. data/lib/oxidized/web/views/diffs.haml +5 -5
  36. data/lib/oxidized/web/views/footer.haml +5 -4
  37. data/lib/oxidized/web/views/head.haml +21 -7
  38. data/lib/oxidized/web/views/layout.haml +25 -34
  39. data/lib/oxidized/web/views/node.haml +10 -8
  40. data/lib/oxidized/web/views/nodes.haml +45 -35
  41. data/lib/oxidized/web/views/stats.haml +32 -24
  42. data/lib/oxidized/web/views/version.haml +8 -6
  43. data/lib/oxidized/web/views/versions.haml +23 -24
  44. data/lib/oxidized/web/webapp.rb +117 -113
  45. data/lib/oxidized/web.rb +10 -7
  46. data/oxidized-web.gemspec +32 -18
  47. data/package-lock.json +104 -0
  48. data/package.json +21 -0
  49. data/spec/node_spec.rb +99 -0
  50. data/spec/node_version_spec.rb +102 -0
  51. data/spec/nodes_spec.rb +57 -0
  52. data/spec/root_spec.rb +18 -0
  53. data/spec/spec_helper.rb +11 -0
  54. data/spec/webapp_spec.rb +28 -0
  55. metadata +183 -74
  56. data/lib/oxidized/web/mig.rb +0 -150
  57. data/lib/oxidized/web/public/css/bootstrap.min.css +0 -5
  58. data/lib/oxidized/web/public/css/buttons.bootstrap.min.css +0 -1
  59. data/lib/oxidized/web/public/css/dataTables.bootstrap.css +0 -299
  60. data/lib/oxidized/web/public/css/dataTables.colVis.css +0 -171
  61. data/lib/oxidized/web/public/css/oxidized_custom.css +0 -19
  62. data/lib/oxidized/web/public/fonts/glyphicons-halflings-regular.eot +0 -0
  63. data/lib/oxidized/web/public/fonts/glyphicons-halflings-regular.svg +0 -229
  64. data/lib/oxidized/web/public/fonts/glyphicons-halflings-regular.ttf +0 -0
  65. data/lib/oxidized/web/public/fonts/glyphicons-halflings-regular.woff +0 -0
  66. data/lib/oxidized/web/public/images/diff_15x17.png +0 -0
  67. data/lib/oxidized/web/public/images/sort_asc.png +0 -0
  68. data/lib/oxidized/web/public/images/sort_asc_disabled.png +0 -0
  69. data/lib/oxidized/web/public/images/sort_both.png +0 -0
  70. data/lib/oxidized/web/public/images/sort_desc.png +0 -0
  71. data/lib/oxidized/web/public/images/sort_desc_disabled.png +0 -0
  72. data/lib/oxidized/web/public/images/versioning_18px.png +0 -0
  73. data/lib/oxidized/web/public/scripts/bootstrap.min.js +0 -6
  74. data/lib/oxidized/web/public/scripts/dataTables.bootstrap.js +0 -186
  75. data/lib/oxidized/web/public/scripts/dataTables.colVis.js +0 -1123
  76. data/lib/oxidized/web/public/scripts/jquery-2.1.1.min.js +0 -4
  77. data/lib/oxidized/web/public/scripts/jquery.dataTables.min.js +0 -157
  78. data/lib/oxidized/web/public/scripts/jquery.min.js +0 -6
  79. data/lib/oxidized/web/public/scripts/script-migration.js +0 -15
  80. data/lib/oxidized/web/views/migration.haml +0 -46
  81. data/lib/oxidized/web/views/sass/oxidized.sass +0 -113
@@ -0,0 +1,517 @@
1
+ :root {
2
+ --dt-row-selected: 13, 110, 253;
3
+ --dt-row-selected-text: 255, 255, 255;
4
+ --dt-row-selected-link: 9, 10, 11;
5
+ --dt-row-stripe: 0, 0, 0;
6
+ --dt-row-hover: 0, 0, 0;
7
+ --dt-column-ordering: 0, 0, 0;
8
+ --dt-html-background: white;
9
+ }
10
+ :root.dark {
11
+ --dt-html-background: rgb(33, 37, 41);
12
+ }
13
+
14
+ table.dataTable td.dt-control {
15
+ text-align: center;
16
+ cursor: pointer;
17
+ }
18
+ table.dataTable td.dt-control:before {
19
+ display: inline-block;
20
+ box-sizing: border-box;
21
+ content: "";
22
+ border-top: 5px solid transparent;
23
+ border-left: 10px solid rgba(0, 0, 0, 0.5);
24
+ border-bottom: 5px solid transparent;
25
+ border-right: 0px solid transparent;
26
+ }
27
+ table.dataTable tr.dt-hasChild td.dt-control:before {
28
+ border-top: 10px solid rgba(0, 0, 0, 0.5);
29
+ border-left: 5px solid transparent;
30
+ border-bottom: 0px solid transparent;
31
+ border-right: 5px solid transparent;
32
+ }
33
+ table.dataTable tfoot:empty {
34
+ display: none;
35
+ }
36
+
37
+ html.dark table.dataTable td.dt-control:before,
38
+ :root[data-bs-theme=dark] table.dataTable td.dt-control:before,
39
+ :root[data-theme=dark] table.dataTable td.dt-control:before {
40
+ border-left-color: rgba(255, 255, 255, 0.5);
41
+ }
42
+ html.dark table.dataTable tr.dt-hasChild td.dt-control:before,
43
+ :root[data-bs-theme=dark] table.dataTable tr.dt-hasChild td.dt-control:before,
44
+ :root[data-theme=dark] table.dataTable tr.dt-hasChild td.dt-control:before {
45
+ border-top-color: rgba(255, 255, 255, 0.5);
46
+ border-left-color: transparent;
47
+ }
48
+
49
+ div.dt-scroll {
50
+ width: 100%;
51
+ }
52
+
53
+ div.dt-scroll-body thead tr,
54
+ div.dt-scroll-body tfoot tr {
55
+ height: 0;
56
+ }
57
+ div.dt-scroll-body thead tr th, div.dt-scroll-body thead tr td,
58
+ div.dt-scroll-body tfoot tr th,
59
+ div.dt-scroll-body tfoot tr td {
60
+ height: 0 !important;
61
+ padding-top: 0px !important;
62
+ padding-bottom: 0px !important;
63
+ border-top-width: 0px !important;
64
+ border-bottom-width: 0px !important;
65
+ }
66
+ div.dt-scroll-body thead tr th div.dt-scroll-sizing, div.dt-scroll-body thead tr td div.dt-scroll-sizing,
67
+ div.dt-scroll-body tfoot tr th div.dt-scroll-sizing,
68
+ div.dt-scroll-body tfoot tr td div.dt-scroll-sizing {
69
+ height: 0 !important;
70
+ overflow: hidden !important;
71
+ }
72
+
73
+ table.dataTable thead > tr > th:active,
74
+ table.dataTable thead > tr > td:active {
75
+ outline: none;
76
+ }
77
+ table.dataTable thead > tr > th.dt-orderable-asc span.dt-column-order:before, table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order:before,
78
+ table.dataTable thead > tr > td.dt-orderable-asc span.dt-column-order:before,
79
+ table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order:before {
80
+ position: absolute;
81
+ display: block;
82
+ bottom: 50%;
83
+ content: "\25B2";
84
+ content: "\25B2"/"";
85
+ }
86
+ table.dataTable thead > tr > th.dt-orderable-desc span.dt-column-order:after, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order:after,
87
+ table.dataTable thead > tr > td.dt-orderable-desc span.dt-column-order:after,
88
+ table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order:after {
89
+ position: absolute;
90
+ display: block;
91
+ top: 50%;
92
+ content: "\25BC";
93
+ content: "\25BC"/"";
94
+ }
95
+ table.dataTable thead > tr > th.dt-orderable-asc, table.dataTable thead > tr > th.dt-orderable-desc, table.dataTable thead > tr > th.dt-ordering-asc, table.dataTable thead > tr > th.dt-ordering-desc,
96
+ table.dataTable thead > tr > td.dt-orderable-asc,
97
+ table.dataTable thead > tr > td.dt-orderable-desc,
98
+ table.dataTable thead > tr > td.dt-ordering-asc,
99
+ table.dataTable thead > tr > td.dt-ordering-desc {
100
+ position: relative;
101
+ padding-right: 30px;
102
+ }
103
+ table.dataTable thead > tr > th.dt-orderable-asc span.dt-column-order, table.dataTable thead > tr > th.dt-orderable-desc span.dt-column-order, table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order,
104
+ table.dataTable thead > tr > td.dt-orderable-asc span.dt-column-order,
105
+ table.dataTable thead > tr > td.dt-orderable-desc span.dt-column-order,
106
+ table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order,
107
+ table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order {
108
+ position: absolute;
109
+ right: 12px;
110
+ top: 0;
111
+ bottom: 0;
112
+ width: 12px;
113
+ }
114
+ table.dataTable thead > tr > th.dt-orderable-asc span.dt-column-order:before, table.dataTable thead > tr > th.dt-orderable-asc span.dt-column-order:after, table.dataTable thead > tr > th.dt-orderable-desc span.dt-column-order:before, table.dataTable thead > tr > th.dt-orderable-desc span.dt-column-order:after, table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order:before, table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order:after, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order:before, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order:after,
115
+ table.dataTable thead > tr > td.dt-orderable-asc span.dt-column-order:before,
116
+ table.dataTable thead > tr > td.dt-orderable-asc span.dt-column-order:after,
117
+ table.dataTable thead > tr > td.dt-orderable-desc span.dt-column-order:before,
118
+ table.dataTable thead > tr > td.dt-orderable-desc span.dt-column-order:after,
119
+ table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order:before,
120
+ table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order:after,
121
+ table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order:before,
122
+ table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order:after {
123
+ left: 0;
124
+ opacity: 0.125;
125
+ line-height: 9px;
126
+ font-size: 0.8em;
127
+ }
128
+ table.dataTable thead > tr > th.dt-orderable-asc, table.dataTable thead > tr > th.dt-orderable-desc,
129
+ table.dataTable thead > tr > td.dt-orderable-asc,
130
+ table.dataTable thead > tr > td.dt-orderable-desc {
131
+ cursor: pointer;
132
+ }
133
+ table.dataTable thead > tr > th.dt-orderable-asc:hover, table.dataTable thead > tr > th.dt-orderable-desc:hover,
134
+ table.dataTable thead > tr > td.dt-orderable-asc:hover,
135
+ table.dataTable thead > tr > td.dt-orderable-desc:hover {
136
+ outline: 2px solid rgba(0, 0, 0, 0.05);
137
+ outline-offset: -2px;
138
+ }
139
+ table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order:before, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order:after,
140
+ table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order:before,
141
+ table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order:after {
142
+ opacity: 0.6;
143
+ }
144
+ table.dataTable thead > tr > th.sorting_desc_disabled span.dt-column-order:after, table.dataTable thead > tr > th.sorting_asc_disabled span.dt-column-order:before,
145
+ table.dataTable thead > tr > td.sorting_desc_disabled span.dt-column-order:after,
146
+ table.dataTable thead > tr > td.sorting_asc_disabled span.dt-column-order:before {
147
+ display: none;
148
+ }
149
+ table.dataTable thead > tr > th:active,
150
+ table.dataTable thead > tr > td:active {
151
+ outline: none;
152
+ }
153
+
154
+ div.dt-scroll-body > table.dataTable > thead > tr > th,
155
+ div.dt-scroll-body > table.dataTable > thead > tr > td {
156
+ overflow: hidden;
157
+ }
158
+
159
+ :root.dark table.dataTable thead > tr > th.dt-orderable-asc:hover, :root.dark table.dataTable thead > tr > th.dt-orderable-desc:hover,
160
+ :root.dark table.dataTable thead > tr > td.dt-orderable-asc:hover,
161
+ :root.dark table.dataTable thead > tr > td.dt-orderable-desc:hover,
162
+ :root[data-bs-theme=dark] table.dataTable thead > tr > th.dt-orderable-asc:hover,
163
+ :root[data-bs-theme=dark] table.dataTable thead > tr > th.dt-orderable-desc:hover,
164
+ :root[data-bs-theme=dark] table.dataTable thead > tr > td.dt-orderable-asc:hover,
165
+ :root[data-bs-theme=dark] table.dataTable thead > tr > td.dt-orderable-desc:hover {
166
+ outline: 2px solid rgba(255, 255, 255, 0.05);
167
+ }
168
+
169
+ div.dt-processing {
170
+ position: absolute;
171
+ top: 50%;
172
+ left: 50%;
173
+ width: 200px;
174
+ margin-left: -100px;
175
+ margin-top: -22px;
176
+ text-align: center;
177
+ padding: 2px;
178
+ z-index: 10;
179
+ }
180
+ div.dt-processing > div:last-child {
181
+ position: relative;
182
+ width: 80px;
183
+ height: 15px;
184
+ margin: 1em auto;
185
+ }
186
+ div.dt-processing > div:last-child > div {
187
+ position: absolute;
188
+ top: 0;
189
+ width: 13px;
190
+ height: 13px;
191
+ border-radius: 50%;
192
+ background: rgb(13, 110, 253);
193
+ background: rgb(var(--dt-row-selected));
194
+ animation-timing-function: cubic-bezier(0, 1, 1, 0);
195
+ }
196
+ div.dt-processing > div:last-child > div:nth-child(1) {
197
+ left: 8px;
198
+ animation: datatables-loader-1 0.6s infinite;
199
+ }
200
+ div.dt-processing > div:last-child > div:nth-child(2) {
201
+ left: 8px;
202
+ animation: datatables-loader-2 0.6s infinite;
203
+ }
204
+ div.dt-processing > div:last-child > div:nth-child(3) {
205
+ left: 32px;
206
+ animation: datatables-loader-2 0.6s infinite;
207
+ }
208
+ div.dt-processing > div:last-child > div:nth-child(4) {
209
+ left: 56px;
210
+ animation: datatables-loader-3 0.6s infinite;
211
+ }
212
+
213
+ @keyframes datatables-loader-1 {
214
+ 0% {
215
+ transform: scale(0);
216
+ }
217
+ 100% {
218
+ transform: scale(1);
219
+ }
220
+ }
221
+ @keyframes datatables-loader-3 {
222
+ 0% {
223
+ transform: scale(1);
224
+ }
225
+ 100% {
226
+ transform: scale(0);
227
+ }
228
+ }
229
+ @keyframes datatables-loader-2 {
230
+ 0% {
231
+ transform: translate(0, 0);
232
+ }
233
+ 100% {
234
+ transform: translate(24px, 0);
235
+ }
236
+ }
237
+ table.dataTable.nowrap th, table.dataTable.nowrap td {
238
+ white-space: nowrap;
239
+ }
240
+ table.dataTable th,
241
+ table.dataTable td {
242
+ box-sizing: border-box;
243
+ }
244
+ table.dataTable th.dt-type-numeric, table.dataTable th.dt-type-date,
245
+ table.dataTable td.dt-type-numeric,
246
+ table.dataTable td.dt-type-date {
247
+ text-align: right;
248
+ }
249
+ table.dataTable th.dt-left,
250
+ table.dataTable td.dt-left {
251
+ text-align: left;
252
+ }
253
+ table.dataTable th.dt-center,
254
+ table.dataTable td.dt-center {
255
+ text-align: center;
256
+ }
257
+ table.dataTable th.dt-right,
258
+ table.dataTable td.dt-right {
259
+ text-align: right;
260
+ }
261
+ table.dataTable th.dt-justify,
262
+ table.dataTable td.dt-justify {
263
+ text-align: justify;
264
+ }
265
+ table.dataTable th.dt-nowrap,
266
+ table.dataTable td.dt-nowrap {
267
+ white-space: nowrap;
268
+ }
269
+ table.dataTable th.dt-empty,
270
+ table.dataTable td.dt-empty {
271
+ text-align: center;
272
+ vertical-align: top;
273
+ }
274
+ table.dataTable thead th,
275
+ table.dataTable thead td,
276
+ table.dataTable tfoot th,
277
+ table.dataTable tfoot td {
278
+ text-align: left;
279
+ }
280
+ table.dataTable thead th.dt-head-left,
281
+ table.dataTable thead td.dt-head-left,
282
+ table.dataTable tfoot th.dt-head-left,
283
+ table.dataTable tfoot td.dt-head-left {
284
+ text-align: left;
285
+ }
286
+ table.dataTable thead th.dt-head-center,
287
+ table.dataTable thead td.dt-head-center,
288
+ table.dataTable tfoot th.dt-head-center,
289
+ table.dataTable tfoot td.dt-head-center {
290
+ text-align: center;
291
+ }
292
+ table.dataTable thead th.dt-head-right,
293
+ table.dataTable thead td.dt-head-right,
294
+ table.dataTable tfoot th.dt-head-right,
295
+ table.dataTable tfoot td.dt-head-right {
296
+ text-align: right;
297
+ }
298
+ table.dataTable thead th.dt-head-justify,
299
+ table.dataTable thead td.dt-head-justify,
300
+ table.dataTable tfoot th.dt-head-justify,
301
+ table.dataTable tfoot td.dt-head-justify {
302
+ text-align: justify;
303
+ }
304
+ table.dataTable thead th.dt-head-nowrap,
305
+ table.dataTable thead td.dt-head-nowrap,
306
+ table.dataTable tfoot th.dt-head-nowrap,
307
+ table.dataTable tfoot td.dt-head-nowrap {
308
+ white-space: nowrap;
309
+ }
310
+ table.dataTable tbody th.dt-body-left,
311
+ table.dataTable tbody td.dt-body-left {
312
+ text-align: left;
313
+ }
314
+ table.dataTable tbody th.dt-body-center,
315
+ table.dataTable tbody td.dt-body-center {
316
+ text-align: center;
317
+ }
318
+ table.dataTable tbody th.dt-body-right,
319
+ table.dataTable tbody td.dt-body-right {
320
+ text-align: right;
321
+ }
322
+ table.dataTable tbody th.dt-body-justify,
323
+ table.dataTable tbody td.dt-body-justify {
324
+ text-align: justify;
325
+ }
326
+ table.dataTable tbody th.dt-body-nowrap,
327
+ table.dataTable tbody td.dt-body-nowrap {
328
+ white-space: nowrap;
329
+ }
330
+
331
+ /*! Bootstrap 5 integration for DataTables
332
+ *
333
+ * ©2020 SpryMedia Ltd, all rights reserved.
334
+ * License: MIT datatables.net/license/mit
335
+ */
336
+ table.table.dataTable {
337
+ clear: both;
338
+ margin-bottom: 0;
339
+ max-width: none;
340
+ border-spacing: 0;
341
+ }
342
+ table.table.dataTable.table-striped > tbody > tr:nth-of-type(2n+1) > * {
343
+ box-shadow: none;
344
+ }
345
+ table.table.dataTable > :not(caption) > * > * {
346
+ background-color: var(--bs-table-bg);
347
+ }
348
+ table.table.dataTable > tbody > tr {
349
+ background-color: transparent;
350
+ }
351
+ table.table.dataTable > tbody > tr.selected > * {
352
+ box-shadow: inset 0 0 0 9999px rgb(13, 110, 253);
353
+ box-shadow: inset 0 0 0 9999px rgb(var(--dt-row-selected));
354
+ color: rgb(255, 255, 255);
355
+ color: rgb(var(--dt-row-selected-text));
356
+ }
357
+ table.table.dataTable > tbody > tr.selected a {
358
+ color: rgb(9, 10, 11);
359
+ color: rgb(var(--dt-row-selected-link));
360
+ }
361
+ table.table.dataTable.table-striped > tbody > tr:nth-of-type(2n+1) > * {
362
+ box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.05);
363
+ }
364
+ table.table.dataTable.table-striped > tbody > tr:nth-of-type(2n+1).selected > * {
365
+ box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.95);
366
+ box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.95);
367
+ }
368
+ table.table.dataTable.table-hover > tbody > tr:hover > * {
369
+ box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.075);
370
+ }
371
+ table.table.dataTable.table-hover > tbody > tr.selected:hover > * {
372
+ box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.975);
373
+ box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.975);
374
+ }
375
+
376
+ div.dt-container div.dt-layout-start > *:not(:last-child) {
377
+ margin-right: 1em;
378
+ }
379
+ div.dt-container div.dt-layout-end > *:not(:first-child) {
380
+ margin-left: 1em;
381
+ }
382
+ div.dt-container div.dt-layout-full {
383
+ width: 100%;
384
+ }
385
+ div.dt-container div.dt-layout-full > *:only-child {
386
+ margin-left: auto;
387
+ margin-right: auto;
388
+ }
389
+ div.dt-container div.dt-layout-table > div {
390
+ display: block !important;
391
+ }
392
+
393
+ @media screen and (max-width: 767px) {
394
+ div.dt-container div.dt-layout-start > *:not(:last-child) {
395
+ margin-right: 0;
396
+ }
397
+ div.dt-container div.dt-layout-end > *:not(:first-child) {
398
+ margin-left: 0;
399
+ }
400
+ }
401
+ div.dt-container div.dt-length label {
402
+ font-weight: normal;
403
+ text-align: left;
404
+ white-space: nowrap;
405
+ }
406
+ div.dt-container div.dt-length select {
407
+ width: auto;
408
+ display: inline-block;
409
+ margin-right: 0.5em;
410
+ }
411
+ div.dt-container div.dt-search {
412
+ text-align: right;
413
+ }
414
+ div.dt-container div.dt-search label {
415
+ font-weight: normal;
416
+ white-space: nowrap;
417
+ text-align: left;
418
+ }
419
+ div.dt-container div.dt-search input {
420
+ margin-left: 0.5em;
421
+ display: inline-block;
422
+ width: auto;
423
+ }
424
+ div.dt-container div.dt-paging {
425
+ margin: 0;
426
+ }
427
+ div.dt-container div.dt-paging ul.pagination {
428
+ margin: 2px 0;
429
+ flex-wrap: wrap;
430
+ }
431
+ div.dt-container div.dt-row {
432
+ position: relative;
433
+ }
434
+
435
+ div.dt-scroll-head table.dataTable {
436
+ margin-bottom: 0 !important;
437
+ }
438
+
439
+ div.dt-scroll-body {
440
+ border-bottom-color: var(--bs-border-color);
441
+ border-bottom-width: var(--bs-border-width);
442
+ border-bottom-style: solid;
443
+ }
444
+ div.dt-scroll-body > table {
445
+ border-top: none;
446
+ margin-top: 0 !important;
447
+ margin-bottom: 0 !important;
448
+ }
449
+ div.dt-scroll-body > table > tbody > tr:first-child {
450
+ border-top-width: 0;
451
+ }
452
+ div.dt-scroll-body > table > thead > tr {
453
+ border-width: 0 !important;
454
+ }
455
+ div.dt-scroll-body > table > tbody > tr:last-child > * {
456
+ border-bottom: none;
457
+ }
458
+
459
+ div.dt-scroll-foot > .dt-scroll-footInner {
460
+ box-sizing: content-box;
461
+ }
462
+ div.dt-scroll-foot > .dt-scroll-footInner > table {
463
+ margin-top: 0 !important;
464
+ border-top: none;
465
+ }
466
+ div.dt-scroll-foot > .dt-scroll-footInner > table > tfoot > tr:first-child {
467
+ border-top-width: 0 !important;
468
+ }
469
+
470
+ @media screen and (max-width: 767px) {
471
+ div.dt-container div.dt-length,
472
+ div.dt-container div.dt-search,
473
+ div.dt-container div.dt-info,
474
+ div.dt-container div.dt-paging {
475
+ text-align: center;
476
+ }
477
+ div.dt-container .row {
478
+ --bs-gutter-y: 0.5rem;
479
+ }
480
+ div.dt-container div.dt-paging ul.pagination {
481
+ justify-content: center !important;
482
+ }
483
+ }
484
+ table.dataTable.table-sm > thead > tr th.dt-orderable-asc, table.dataTable.table-sm > thead > tr th.dt-orderable-desc, table.dataTable.table-sm > thead > tr th.dt-ordering-asc, table.dataTable.table-sm > thead > tr th.dt-ordering-desc,
485
+ table.dataTable.table-sm > thead > tr td.dt-orderable-asc,
486
+ table.dataTable.table-sm > thead > tr td.dt-orderable-desc,
487
+ table.dataTable.table-sm > thead > tr td.dt-ordering-asc,
488
+ table.dataTable.table-sm > thead > tr td.dt-ordering-desc {
489
+ padding-right: 20px;
490
+ }
491
+ table.dataTable.table-sm > thead > tr th.dt-orderable-asc span.dt-column-order, table.dataTable.table-sm > thead > tr th.dt-orderable-desc span.dt-column-order, table.dataTable.table-sm > thead > tr th.dt-ordering-asc span.dt-column-order, table.dataTable.table-sm > thead > tr th.dt-ordering-desc span.dt-column-order,
492
+ table.dataTable.table-sm > thead > tr td.dt-orderable-asc span.dt-column-order,
493
+ table.dataTable.table-sm > thead > tr td.dt-orderable-desc span.dt-column-order,
494
+ table.dataTable.table-sm > thead > tr td.dt-ordering-asc span.dt-column-order,
495
+ table.dataTable.table-sm > thead > tr td.dt-ordering-desc span.dt-column-order {
496
+ right: 5px;
497
+ }
498
+
499
+ div.dt-scroll-head table.table-bordered {
500
+ border-bottom-width: 0;
501
+ }
502
+
503
+ div.table-responsive > div.dt-container > div.row {
504
+ margin: 0;
505
+ }
506
+ div.table-responsive > div.dt-container > div.row > div[class^=col-]:first-child {
507
+ padding-left: 0;
508
+ }
509
+ div.table-responsive > div.dt-container > div.row > div[class^=col-]:last-child {
510
+ padding-right: 0;
511
+ }
512
+
513
+ :root[data-bs-theme=dark] {
514
+ --dt-row-hover: 255, 255, 255;
515
+ --dt-row-stripe: 255, 255, 255;
516
+ --dt-column-ordering: 255, 255, 255;
517
+ }
@@ -0,0 +1,122 @@
1
+ /*! DataTables Bootstrap 5 integration
2
+ * © SpryMedia Ltd - datatables.net/license
3
+ */
4
+
5
+ (function( factory ){
6
+ if ( typeof define === 'function' && define.amd ) {
7
+ // AMD
8
+ define( ['jquery', 'datatables.net'], function ( $ ) {
9
+ return factory( $, window, document );
10
+ } );
11
+ }
12
+ else if ( typeof exports === 'object' ) {
13
+ // CommonJS
14
+ var jq = require('jquery');
15
+ var cjsRequires = function (root, $) {
16
+ if ( ! $.fn.dataTable ) {
17
+ require('datatables.net')(root, $);
18
+ }
19
+ };
20
+
21
+ if (typeof window === 'undefined') {
22
+ module.exports = function (root, $) {
23
+ if ( ! root ) {
24
+ // CommonJS environments without a window global must pass a
25
+ // root. This will give an error otherwise
26
+ root = window;
27
+ }
28
+
29
+ if ( ! $ ) {
30
+ $ = jq( root );
31
+ }
32
+
33
+ cjsRequires( root, $ );
34
+ return factory( $, root, root.document );
35
+ };
36
+ }
37
+ else {
38
+ cjsRequires( window, jq );
39
+ module.exports = factory( jq, window, window.document );
40
+ }
41
+ }
42
+ else {
43
+ // Browser
44
+ factory( jQuery, window, document );
45
+ }
46
+ }(function( $, window, document ) {
47
+ 'use strict';
48
+ var DataTable = $.fn.dataTable;
49
+
50
+
51
+
52
+ /**
53
+ * DataTables integration for Bootstrap 5.
54
+ *
55
+ * This file sets the defaults and adds options to DataTables to style its
56
+ * controls using Bootstrap. See https://datatables.net/manual/styling/bootstrap
57
+ * for further information.
58
+ */
59
+
60
+ /* Set the defaults for DataTables initialisation */
61
+ $.extend( true, DataTable.defaults, {
62
+ renderer: 'bootstrap'
63
+ } );
64
+
65
+
66
+ /* Default class modification */
67
+ $.extend( true, DataTable.ext.classes, {
68
+ container: "dt-container dt-bootstrap5",
69
+ search: {
70
+ input: "form-control form-control-sm"
71
+ },
72
+ length: {
73
+ select: "form-select form-select-sm"
74
+ },
75
+ processing: {
76
+ container: "dt-processing card"
77
+ },
78
+ layout: {
79
+ row: 'row mt-2 justify-content-between',
80
+ cell: 'd-md-flex justify-content-between align-items-center',
81
+ tableCell: 'col-12',
82
+ start: 'dt-layout-start col-md-auto me-auto',
83
+ end: 'dt-layout-end col-md-auto ms-auto',
84
+ full: 'dt-layout-full col-md'
85
+ }
86
+ } );
87
+
88
+
89
+ /* Bootstrap paging button renderer */
90
+ DataTable.ext.renderer.pagingButton.bootstrap = function (settings, buttonType, content, active, disabled) {
91
+ var btnClasses = ['dt-paging-button', 'page-item'];
92
+
93
+ if (active) {
94
+ btnClasses.push('active');
95
+ }
96
+
97
+ if (disabled) {
98
+ btnClasses.push('disabled')
99
+ }
100
+
101
+ var li = $('<li>').addClass(btnClasses.join(' '));
102
+ var a = $('<button>', {
103
+ 'class': 'page-link',
104
+ role: 'link',
105
+ type: 'button'
106
+ })
107
+ .html(content)
108
+ .appendTo(li);
109
+
110
+ return {
111
+ display: li,
112
+ clicker: a
113
+ };
114
+ };
115
+
116
+ DataTable.ext.renderer.pagingContainer.bootstrap = function (settings, buttonEls) {
117
+ return $('<ul/>').addClass('pagination').append(buttonEls);
118
+ };
119
+
120
+
121
+ return DataTable;
122
+ }));