Skip to content

Commit d2e009c

Browse files
committed
UI Improvement: Add visual group separators for sorted event table, for specific columns (e.g. category, tags, plugin, targets).
1 parent 21813d0 commit d2e009c

3 files changed

Lines changed: 47 additions & 1 deletion

File tree

htdocs/css/style.css

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1300,6 +1300,17 @@ div.td_big {
13001300
height: 21px;
13011301
}
13021302

1303+
.data_grid > ul.grid_row.cat_sep > div {
1304+
grid-column: 1 / -1;
1305+
padding-top: 20px;
1306+
color: var(--label-color);
1307+
font-style: italic;
1308+
cursor: default;
1309+
}
1310+
.data_grid > ul.grid_row.cat_sep:has(div:hover) > div {
1311+
background: transparent !important;
1312+
}
1313+
13031314
.data_grid > ul.grid_row > div {
13041315
background-color: transparent;
13051316
transition: 0.5s ease background-color;

htdocs/js/pages/Base.class.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3582,11 +3582,13 @@ Page.Base = class Base extends Page {
35823582
for (var idx = 0; idx < len; idx++) {
35833583
var row = disp_rows[idx];
35843584
var tds = opts.callback(row, idx);
3585+
if (tds.insertBefore) html += tds.insertBefore;
35853586
html += '<ul class="grid_row ' + (tds.className || '') + '">';
35863587
for (var idy = 0, ley = tds.length; idy < ley; idy++) {
35873588
html += '<div' + ((bold_idx == idy) ? ' style="font-weight:bold"' : '') + '>' + tds[idy] + '</div>';
35883589
}
35893590
html += '</ul>';
3591+
if (tds.insertAfter) html += tds.insertAfter;
35903592
} // foreach row
35913593

35923594
if (!disp_rows.length) {

htdocs/js/pages/Events.class.js

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,10 @@ Page.Events = class Events extends Page.PageUtils {
317317
column_labels: ['Event Title', 'Category', 'Tags', 'Plugin', 'Targets', 'Triggers', 'Status', 'Actions']
318318
};
319319

320-
html += this.getSortableTable( this.events, table_opts, function(item) {
320+
var last_item = null;
321+
322+
html += this.getSortableTable( this.events, table_opts, function(item, sort_idx) {
323+
if (!sort_idx) last_item = null;
321324
var classes = [];
322325
var cat = cat_map[ item.category ] || { title: item.category };
323326

@@ -342,6 +345,36 @@ Page.Events = class Events extends Page.PageUtils {
342345
if (!item.enabled) classes.push('disabled');
343346
if (cat.color) classes.push( 'clr_' + cat.color );
344347
if (classes.length) tds.className = classes.join(' ');
348+
349+
// decorate changes for certain columns
350+
switch (table_opts.sort_by) {
351+
case 'cat_sort':
352+
if (!last_item || (last_item.cat_sort != item.cat_sort)) {
353+
tds.insertBefore = `<ul class="grid_row cat_sep"><div>${ self.getNiceCategory(item.category, false) }</div></ul>`;
354+
}
355+
break;
356+
357+
case 'tag_sort':
358+
if (!last_item || (last_item.tag_sort != item.tag_sort)) {
359+
tds.insertBefore = `<ul class="grid_row cat_sep"><div>${ self.getNiceTagList(item.tags || [], false, ', ') }</div></ul>`;
360+
}
361+
break;
362+
363+
case 'plug_sort':
364+
if (!last_item || (last_item.plug_sort != item.plug_sort)) {
365+
var nice_sep = (item.plugin == '_workflow') ? '(Workflow)' : self.getNicePlugin(item.plugin, false);
366+
tds.insertBefore = `<ul class="grid_row cat_sep"><div>${ nice_sep }</div></ul>`;
367+
}
368+
break;
369+
370+
case 'target_sort':
371+
if (!last_item || (last_item.target_sort != item.target_sort)) {
372+
tds.insertBefore = `<ul class="grid_row cat_sep"><div>${ self.getNiceTargetList(item.targets, false) }</div></ul>`;
373+
}
374+
break;
375+
} // switch table_opts.sort_by
376+
377+
last_item = item;
345378
return tds;
346379
}); // getSortableTable
347380

0 commit comments

Comments
 (0)