oxidized-web 0.17.1 → 0.18.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.
Potentially problematic release.
This version of oxidized-web might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.github/workflows/codeql.yml +4 -4
- data/.github/workflows/ruby.yml +1 -1
- data/.github/workflows/stale.yml +1 -1
- data/CHANGELOG.md +17 -0
- data/docs/development.md +14 -12
- data/lib/oxidized/web/public/css/oxidized.css +22 -11
- data/lib/oxidized/web/public/scripts/theme-toggle.js +55 -0
- data/lib/oxidized/web/public/weblibs/bootstrap.bundle.js +2 -5
- data/lib/oxidized/web/public/weblibs/bootstrap.bundle.js.map +1 -1
- data/lib/oxidized/web/public/weblibs/bootstrap.css +6 -1
- data/lib/oxidized/web/public/weblibs/bootstrap.css.map +1 -1
- data/lib/oxidized/web/public/weblibs/bootstrap.js +2 -5
- data/lib/oxidized/web/public/weblibs/bootstrap.js.map +1 -1
- data/lib/oxidized/web/public/weblibs/buttons.bootstrap5.css +56 -39
- data/lib/oxidized/web/public/weblibs/buttons.bootstrap5.js +14 -6
- data/lib/oxidized/web/public/weblibs/dataTables.bootstrap5.css +7 -8
- data/lib/oxidized/web/public/weblibs/dataTables.buttons.js +15 -8
- data/lib/oxidized/web/public/weblibs/dataTables.js +331 -277
- data/lib/oxidized/web/version.rb +1 -1
- data/lib/oxidized/web/views/head.haml +2 -0
- data/lib/oxidized/web/views/layout.haml +2 -0
- data/lib/oxidized/web/views/node.haml +3 -3
- data/lib/oxidized/web/views/nodes.haml +3 -3
- data/lib/oxidized/web/views/versions.haml +2 -2
- data/lib/oxidized/web/webapp.rb +6 -1
- data/oxidized-web.gemspec +12 -10
- data/package-lock.json +20 -20
- data/spec/web/nodes_spec.rb +7 -0
- metadata +41 -39
|
@@ -204,19 +204,37 @@ div.dt-buttons .btn.processing:after {
|
|
|
204
204
|
-moz-animation: dtb-spinner 1500ms infinite linear;
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
-
div.
|
|
207
|
+
div.dt-button-collection {
|
|
208
|
+
position: absolute;
|
|
209
|
+
min-width: 200px;
|
|
208
210
|
margin-top: 4px;
|
|
209
|
-
|
|
211
|
+
z-index: 2002;
|
|
212
|
+
background-color: var(--bs-body-bg);
|
|
213
|
+
border: var(--bs-border-width) solid var(--bs-border-color);
|
|
214
|
+
border-radius: var(--bs-border-radius);
|
|
215
|
+
box-shadow: var(--bs-box-shadow);
|
|
210
216
|
}
|
|
211
|
-
div.
|
|
217
|
+
div.dt-button-collection div.dt-button-collection-title {
|
|
218
|
+
padding: 0.75em 0 0.25em;
|
|
219
|
+
}
|
|
220
|
+
div.dt-button-collection .dropdown-menu {
|
|
212
221
|
position: relative;
|
|
222
|
+
display: block;
|
|
223
|
+
width: 100%;
|
|
224
|
+
background-color: transparent;
|
|
225
|
+
border: none;
|
|
226
|
+
border-radius: 0;
|
|
227
|
+
box-shadow: none;
|
|
213
228
|
}
|
|
214
|
-
div.
|
|
229
|
+
div.dt-button-collection .dt-button {
|
|
230
|
+
position: relative;
|
|
231
|
+
}
|
|
232
|
+
div.dt-button-collection .dt-button.dropdown-toggle::after {
|
|
215
233
|
position: absolute;
|
|
216
234
|
right: 12px;
|
|
217
235
|
top: 14px;
|
|
218
236
|
}
|
|
219
|
-
div.
|
|
237
|
+
div.dt-button-collection div.dt-button-split {
|
|
220
238
|
display: flex;
|
|
221
239
|
flex-direction: row;
|
|
222
240
|
flex-wrap: wrap;
|
|
@@ -224,12 +242,11 @@ div.dropdown-menu.dt-button-collection div.dt-button-split {
|
|
|
224
242
|
align-content: flex-start;
|
|
225
243
|
align-items: stretch;
|
|
226
244
|
}
|
|
227
|
-
div.
|
|
245
|
+
div.dt-button-collection div.dt-button-split > *:first-child {
|
|
228
246
|
min-width: auto;
|
|
229
247
|
flex: 1 0 50px;
|
|
230
|
-
padding-right: 0;
|
|
231
248
|
}
|
|
232
|
-
div.
|
|
249
|
+
div.dt-button-collection div.dt-button-split button:last-child {
|
|
233
250
|
min-width: 33px;
|
|
234
251
|
flex: 0;
|
|
235
252
|
background: transparent;
|
|
@@ -239,11 +256,11 @@ div.dropdown-menu.dt-button-collection div.dt-button-split button:last-child {
|
|
|
239
256
|
padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);
|
|
240
257
|
overflow: visible;
|
|
241
258
|
}
|
|
242
|
-
div.
|
|
259
|
+
div.dt-button-collection div.dt-button-split button:last-child:hover {
|
|
243
260
|
color: var(--bs-dropdown-link-hover-color);
|
|
244
261
|
background-color: var(--bs-dropdown-link-hover-bg);
|
|
245
262
|
}
|
|
246
|
-
div.
|
|
263
|
+
div.dt-button-collection.fixed {
|
|
247
264
|
position: fixed;
|
|
248
265
|
display: block;
|
|
249
266
|
top: 50%;
|
|
@@ -253,73 +270,73 @@ div.dropdown-menu.dt-button-collection.fixed {
|
|
|
253
270
|
background-color: white;
|
|
254
271
|
padding: 0.5em;
|
|
255
272
|
}
|
|
256
|
-
div.
|
|
273
|
+
div.dt-button-collection.fixed.two-column {
|
|
257
274
|
margin-left: -200px;
|
|
258
275
|
}
|
|
259
|
-
div.
|
|
276
|
+
div.dt-button-collection.fixed.three-column {
|
|
260
277
|
margin-left: -225px;
|
|
261
278
|
}
|
|
262
|
-
div.
|
|
279
|
+
div.dt-button-collection.fixed.four-column {
|
|
263
280
|
margin-left: -300px;
|
|
264
281
|
}
|
|
265
|
-
div.
|
|
282
|
+
div.dt-button-collection.fixed.columns {
|
|
266
283
|
margin-left: -409px;
|
|
267
284
|
}
|
|
268
285
|
@media screen and (max-width: 1024px) {
|
|
269
|
-
div.
|
|
286
|
+
div.dt-button-collection.fixed.columns {
|
|
270
287
|
margin-left: -308px;
|
|
271
288
|
}
|
|
272
289
|
}
|
|
273
290
|
@media screen and (max-width: 640px) {
|
|
274
|
-
div.
|
|
291
|
+
div.dt-button-collection.fixed.columns {
|
|
275
292
|
margin-left: -203px;
|
|
276
293
|
}
|
|
277
294
|
}
|
|
278
295
|
@media screen and (max-width: 460px) {
|
|
279
|
-
div.
|
|
296
|
+
div.dt-button-collection.fixed.columns {
|
|
280
297
|
margin-left: -100px;
|
|
281
298
|
}
|
|
282
299
|
}
|
|
283
|
-
div.
|
|
300
|
+
div.dt-button-collection.fixed > :last-child {
|
|
284
301
|
max-height: 100vh;
|
|
285
302
|
overflow: auto;
|
|
286
303
|
}
|
|
287
|
-
div.
|
|
304
|
+
div.dt-button-collection.two-column > :last-child, div.dt-button-collection.three-column > :last-child, div.dt-button-collection.four-column > :last-child {
|
|
288
305
|
display: block !important;
|
|
289
306
|
column-gap: 8px;
|
|
290
307
|
}
|
|
291
|
-
div.
|
|
308
|
+
div.dt-button-collection.two-column > :last-child > *, div.dt-button-collection.three-column > :last-child > *, div.dt-button-collection.four-column > :last-child > * {
|
|
292
309
|
-webkit-column-break-inside: avoid;
|
|
293
310
|
break-inside: avoid;
|
|
294
311
|
}
|
|
295
|
-
div.
|
|
312
|
+
div.dt-button-collection.two-column {
|
|
296
313
|
width: 400px;
|
|
297
314
|
}
|
|
298
|
-
div.
|
|
315
|
+
div.dt-button-collection.two-column > :last-child {
|
|
299
316
|
padding-bottom: 1px;
|
|
300
317
|
column-count: 2;
|
|
301
318
|
}
|
|
302
|
-
div.
|
|
319
|
+
div.dt-button-collection.three-column {
|
|
303
320
|
width: 450px;
|
|
304
321
|
}
|
|
305
|
-
div.
|
|
322
|
+
div.dt-button-collection.three-column > :last-child {
|
|
306
323
|
padding-bottom: 1px;
|
|
307
324
|
column-count: 3;
|
|
308
325
|
}
|
|
309
|
-
div.
|
|
326
|
+
div.dt-button-collection.four-column {
|
|
310
327
|
width: 600px;
|
|
311
328
|
}
|
|
312
|
-
div.
|
|
329
|
+
div.dt-button-collection.four-column > :last-child {
|
|
313
330
|
padding-bottom: 1px;
|
|
314
331
|
column-count: 4;
|
|
315
332
|
}
|
|
316
|
-
div.
|
|
333
|
+
div.dt-button-collection .dt-button {
|
|
317
334
|
border-radius: 0;
|
|
318
335
|
}
|
|
319
|
-
div.
|
|
336
|
+
div.dt-button-collection.columns {
|
|
320
337
|
width: auto;
|
|
321
338
|
}
|
|
322
|
-
div.
|
|
339
|
+
div.dt-button-collection.columns > :last-child {
|
|
323
340
|
display: flex;
|
|
324
341
|
flex-wrap: wrap;
|
|
325
342
|
justify-content: flex-start;
|
|
@@ -328,38 +345,38 @@ div.dropdown-menu.dt-button-collection.columns > :last-child {
|
|
|
328
345
|
width: 818px;
|
|
329
346
|
padding-bottom: 1px;
|
|
330
347
|
}
|
|
331
|
-
div.
|
|
348
|
+
div.dt-button-collection.columns > :last-child .dt-button {
|
|
332
349
|
min-width: 200px;
|
|
333
350
|
flex: 0 1;
|
|
334
351
|
margin: 0;
|
|
335
352
|
}
|
|
336
|
-
div.
|
|
353
|
+
div.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-button-collection.columns.dtb-b1 > :last-child {
|
|
337
354
|
justify-content: space-between;
|
|
338
355
|
}
|
|
339
|
-
div.
|
|
356
|
+
div.dt-button-collection.columns.dtb-b3 .dt-button {
|
|
340
357
|
flex: 1 1 32%;
|
|
341
358
|
}
|
|
342
|
-
div.
|
|
359
|
+
div.dt-button-collection.columns.dtb-b2 .dt-button {
|
|
343
360
|
flex: 1 1 48%;
|
|
344
361
|
}
|
|
345
|
-
div.
|
|
362
|
+
div.dt-button-collection.columns.dtb-b1 .dt-button {
|
|
346
363
|
flex: 1 1 100%;
|
|
347
364
|
}
|
|
348
365
|
@media screen and (max-width: 1024px) {
|
|
349
|
-
div.
|
|
366
|
+
div.dt-button-collection.columns > :last-child {
|
|
350
367
|
width: 612px;
|
|
351
368
|
}
|
|
352
369
|
}
|
|
353
370
|
@media screen and (max-width: 640px) {
|
|
354
|
-
div.
|
|
371
|
+
div.dt-button-collection.columns > :last-child {
|
|
355
372
|
width: 406px;
|
|
356
373
|
}
|
|
357
|
-
div.
|
|
374
|
+
div.dt-button-collection.columns.dtb-b3 .dt-button {
|
|
358
375
|
flex: 0 1 32%;
|
|
359
376
|
}
|
|
360
377
|
}
|
|
361
378
|
@media screen and (max-width: 460px) {
|
|
362
|
-
div.
|
|
379
|
+
div.dt-button-collection.columns > :last-child {
|
|
363
380
|
width: 200px;
|
|
364
381
|
}
|
|
365
382
|
}
|
|
@@ -389,7 +406,7 @@ div.dt-button-info {
|
|
|
389
406
|
border: 1px solid var(--bs-border-color-translucent);
|
|
390
407
|
}
|
|
391
408
|
|
|
392
|
-
:root[data-bs-theme=dark] div.
|
|
409
|
+
:root[data-bs-theme=dark] div.dt-button-collection.fixed {
|
|
393
410
|
background-color: var(--bs-body-bg);
|
|
394
411
|
border: 1px solid var(--bs-border-color-translucent);
|
|
395
412
|
}
|
|
@@ -67,17 +67,25 @@ $.extend(true, DataTable.Buttons.defaults, {
|
|
|
67
67
|
collection: {
|
|
68
68
|
container: {
|
|
69
69
|
tag: 'div',
|
|
70
|
-
className: '
|
|
70
|
+
className: 'dt-button-collection',
|
|
71
|
+
content: {
|
|
72
|
+
tag: 'ul',
|
|
73
|
+
className: 'dropdown-menu show'
|
|
74
|
+
}
|
|
71
75
|
},
|
|
72
76
|
closeButton: false,
|
|
73
77
|
button: {
|
|
74
|
-
tag: '
|
|
75
|
-
className: 'dt-button
|
|
76
|
-
active: 'dt-button-active',
|
|
78
|
+
tag: 'li',
|
|
79
|
+
className: 'dt-button',
|
|
80
|
+
active: 'dt-button-active-a',
|
|
77
81
|
disabled: 'disabled',
|
|
82
|
+
liner: {
|
|
83
|
+
tag: 'a',
|
|
84
|
+
className: 'dropdown-item'
|
|
85
|
+
},
|
|
78
86
|
spacer: {
|
|
79
|
-
className: '
|
|
80
|
-
tag: '
|
|
87
|
+
className: 'divider',
|
|
88
|
+
tag: 'li'
|
|
81
89
|
}
|
|
82
90
|
}
|
|
83
91
|
},
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
:root {
|
|
2
2
|
--dt-row-selected: 13, 110, 253;
|
|
3
3
|
--dt-row-selected-text: 255, 255, 255;
|
|
4
|
-
--dt-row-selected-link:
|
|
4
|
+
--dt-row-selected-link: 228, 228, 228;
|
|
5
5
|
--dt-row-stripe: 0, 0, 0;
|
|
6
6
|
--dt-row-hover: 0, 0, 0;
|
|
7
7
|
--dt-column-ordering: 0, 0, 0;
|
|
8
8
|
--dt-header-align-items: center;
|
|
9
|
+
--dt-header-vertical-align: middle;
|
|
9
10
|
--dt-html-background: white;
|
|
10
11
|
}
|
|
11
12
|
:root.dark {
|
|
@@ -100,7 +101,7 @@ table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order,
|
|
|
100
101
|
table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order {
|
|
101
102
|
position: relative;
|
|
102
103
|
width: 12px;
|
|
103
|
-
height:
|
|
104
|
+
height: 24px;
|
|
104
105
|
}
|
|
105
106
|
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,
|
|
106
107
|
table.dataTable thead > tr > td.dt-orderable-asc span.dt-column-order:before,
|
|
@@ -132,7 +133,8 @@ table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order:before,
|
|
|
132
133
|
table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order:after {
|
|
133
134
|
opacity: 0.6;
|
|
134
135
|
}
|
|
135
|
-
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,
|
|
136
|
+
table.dataTable thead > tr > th.dt-orderable-none:not(.dt-ordering-asc, .dt-ordering-desc) span.dt-column-order:empty, 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,
|
|
137
|
+
table.dataTable thead > tr > td.dt-orderable-none:not(.dt-ordering-asc, .dt-ordering-desc) span.dt-column-order:empty,
|
|
136
138
|
table.dataTable thead > tr > td.sorting_desc_disabled span.dt-column-order:after,
|
|
137
139
|
table.dataTable thead > tr > td.sorting_asc_disabled span.dt-column-order:before {
|
|
138
140
|
display: none;
|
|
@@ -328,6 +330,7 @@ table.dataTable thead td,
|
|
|
328
330
|
table.dataTable tfoot th,
|
|
329
331
|
table.dataTable tfoot td {
|
|
330
332
|
text-align: left;
|
|
333
|
+
vertical-align: var(--dt-header-vertical-align);
|
|
331
334
|
}
|
|
332
335
|
table.dataTable thead th.dt-head-left,
|
|
333
336
|
table.dataTable thead td.dt-head-left,
|
|
@@ -410,10 +413,6 @@ table.dataTable tbody td.dt-body-nowrap {
|
|
|
410
413
|
white-space: nowrap;
|
|
411
414
|
}
|
|
412
415
|
|
|
413
|
-
:root {
|
|
414
|
-
--dt-header-align-items: flex-end;
|
|
415
|
-
}
|
|
416
|
-
|
|
417
416
|
/*! Bootstrap 5 integration for DataTables
|
|
418
417
|
*
|
|
419
418
|
* ©2020 SpryMedia Ltd, all rights reserved.
|
|
@@ -441,7 +440,7 @@ table.table.dataTable > tbody > tr.selected > * {
|
|
|
441
440
|
color: rgb(var(--dt-row-selected-text));
|
|
442
441
|
}
|
|
443
442
|
table.table.dataTable > tbody > tr.selected a {
|
|
444
|
-
color: rgb(
|
|
443
|
+
color: rgb(228, 228, 228);
|
|
445
444
|
color: rgb(var(--dt-row-selected-link));
|
|
446
445
|
}
|
|
447
446
|
table.table.dataTable.table-striped > tbody > tr:nth-of-type(2n+1) > * {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Buttons for DataTables 3.2.
|
|
1
|
+
/*! Buttons for DataTables 3.2.5
|
|
2
2
|
* © SpryMedia Ltd - datatables.net/license
|
|
3
3
|
*/
|
|
4
4
|
|
|
@@ -224,7 +224,7 @@ $.extend(Buttons.prototype, {
|
|
|
224
224
|
idx = split[split.length - 1] * 1;
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
-
this._expandButton(
|
|
227
|
+
let node = this._expandButton(
|
|
228
228
|
buttons,
|
|
229
229
|
config,
|
|
230
230
|
config !== undefined ? config.split : undefined,
|
|
@@ -240,7 +240,7 @@ $.extend(Buttons.prototype, {
|
|
|
240
240
|
this._draw();
|
|
241
241
|
}
|
|
242
242
|
|
|
243
|
-
return
|
|
243
|
+
return node;
|
|
244
244
|
},
|
|
245
245
|
|
|
246
246
|
/**
|
|
@@ -646,6 +646,7 @@ $.extend(Buttons.prototype, {
|
|
|
646
646
|
var isSplit = false;
|
|
647
647
|
var domCollection = this.c.dom.collection;
|
|
648
648
|
var buttons = !Array.isArray(button) ? [button] : button;
|
|
649
|
+
var lastButton;
|
|
649
650
|
|
|
650
651
|
if (button === undefined) {
|
|
651
652
|
buttons = !Array.isArray(split) ? [split] : split;
|
|
@@ -765,7 +766,11 @@ $.extend(Buttons.prototype, {
|
|
|
765
766
|
if (conf.init) {
|
|
766
767
|
conf.init.call(dt.button(built.node), dt, $(built.node), conf);
|
|
767
768
|
}
|
|
769
|
+
|
|
770
|
+
lastButton = built.node;
|
|
768
771
|
}
|
|
772
|
+
|
|
773
|
+
return lastButton;
|
|
769
774
|
},
|
|
770
775
|
|
|
771
776
|
/**
|
|
@@ -2043,8 +2048,7 @@ Buttons.stripData = function (str, config) {
|
|
|
2043
2048
|
|
|
2044
2049
|
// Prevent Excel from running a formula
|
|
2045
2050
|
if (!config || config.escapeExcelFormula) {
|
|
2046
|
-
if (str.match(/^[
|
|
2047
|
-
console.log('matching and updateing');
|
|
2051
|
+
if (str.match(/^[=@\t\r]/)) {
|
|
2048
2052
|
str = "'" + str;
|
|
2049
2053
|
}
|
|
2050
2054
|
}
|
|
@@ -2167,7 +2171,7 @@ Buttons.defaults = {
|
|
|
2167
2171
|
* @type {string}
|
|
2168
2172
|
* @static
|
|
2169
2173
|
*/
|
|
2170
|
-
Buttons.version = '3.2.
|
|
2174
|
+
Buttons.version = '3.2.5';
|
|
2171
2175
|
|
|
2172
2176
|
$.extend(_dtButtons, {
|
|
2173
2177
|
collection: {
|
|
@@ -2551,6 +2555,7 @@ DataTable.Api.register('buttons().container()', function () {
|
|
|
2551
2555
|
// Add a new button
|
|
2552
2556
|
DataTable.Api.register('button().add()', function (idx, conf, draw) {
|
|
2553
2557
|
var ctx = this.context;
|
|
2558
|
+
var node;
|
|
2554
2559
|
|
|
2555
2560
|
// Don't use `this` as it could be empty - select the instances directly
|
|
2556
2561
|
if (ctx.length) {
|
|
@@ -2560,11 +2565,13 @@ DataTable.Api.register('button().add()', function (idx, conf, draw) {
|
|
|
2560
2565
|
);
|
|
2561
2566
|
|
|
2562
2567
|
if (inst.length) {
|
|
2563
|
-
inst[0].add(conf, idx, draw);
|
|
2568
|
+
node = inst[0].add(conf, idx, draw);
|
|
2564
2569
|
}
|
|
2565
2570
|
}
|
|
2566
2571
|
|
|
2567
|
-
return
|
|
2572
|
+
return node
|
|
2573
|
+
? this.button(this._groupSelector, node)
|
|
2574
|
+
: this;
|
|
2568
2575
|
});
|
|
2569
2576
|
|
|
2570
2577
|
// Destroy the button sets selected
|