diff --git a/public/styles/style.css b/public/styles/style.css index b23f6808..75d4b26b 100644 --- a/public/styles/style.css +++ b/public/styles/style.css @@ -15,6 +15,10 @@ body { /* overflow-y: hidden; */ } +.night .collapseImage { + filter: invert(100%); +} + #container { background-color: #fff; width: 960px; diff --git a/views/default.handlebars b/views/default.handlebars index af6a81e8..a8739b1c 100644 --- a/views/default.handlebars +++ b/views/default.handlebars @@ -2798,9 +2798,9 @@ r += '
'; r += '' + extra; r += ''; - if ((view == 1) || (view == 3)) { + if ((view == 1) || (view == 2) || (view == 3)) { var collapsed = CollapsedGroups[node.meshid]; - r += ''; // Collapse action + r += ''; // Collapse action } r += '' + EscapeHtml(meshes[node.meshid].name) + '' + getMeshActions(mesh2, meshrights) + '
'; if (view == 2) { r += ''; } @@ -2819,9 +2819,9 @@ if (view == 2) { r += ''; } r += '
'; - if ((view == 1) || (view == 3)) { + if ((view == 1) || (view == 2) || (view == 3)) { var collapsed = CollapsedGroups['pwr:' + pwr]; - r += ''; // Collapse action + r += ''; // Collapse action } r += '' + PowerStateStr2(node.pwr) + '
'; @@ -2856,7 +2856,12 @@ if ((node.conn & 8) != 0) { states.push('' + "Relay" + ''); } if ((node.conn & 16) != 0) { states.push('' + "MQTT" + ''); } } - r += '
'; + + var collapseName = node.meshid; + if (sort == 1) { collapseName = 'pwr:' + node.pwr; } + else if (sort == 3) { collapseName = 'tag:**xx**xx*TaG*xx**xx**'; } + var collapsed = (sort != 3) & CollapsedGroups[collapseName]; + r += '
'; r += '
'; r += '
'; r += '
'; @@ -2882,7 +2887,9 @@ if (node.tags) { for (var j in node.tags) { var tag = node.tags[j]; - if (groups[tag] == null) { groups[tag] = r; groupCount[tag] = 1; } else { groups[tag] += r; groupCount[tag] += 1; } + var collapsed = CollapsedGroups['tag:' + tag]; + var r2 = r.replace('**xx**xx*TaG*xx**xx**', tag + (collapsed?' style=display:none':'')); + if (groups[tag] == null) { groups[tag] = r2; groupCount[tag] = 1; } else { groups[tag] += r2; groupCount[tag] += 1; } if (view == 3) break; } } @@ -2907,17 +2914,20 @@ for (var j in groupNames) { var i = groupNames[j]; if (view == 2) { - r += '
' + groupCount[i] + ' node' + ((groupCount[i] > 1) ? 's' : '') + '' + i + '
' + groups[i]; + r += '
'; + var collapsed = CollapsedGroups['tag:' + i]; + r += ''; // Collapse action + r += '' + groupCount[i] + ' node' + ((groupCount[i] > 1) ? 's' : '') + '' + i + '
' + groups[i]; } else { r += '
' + groupCount[i] + ' node' + ((groupCount[i] > 1) ? 's' : '') + ''; var collapsed = CollapsedGroups['tag:' + i]; - r += ''; // Collapse action + r += ''; // Collapse action r += '' + i + '
'; r += '
'; // Open collapse div r += groups[i]; r += '
'; - tagDeviceHeaderId++; } + tagDeviceHeaderId++; } } @@ -2946,7 +2956,7 @@ // Collapsing header & start collapsing area deviceHeaderId2++; var collapsed = CollapsedGroups[mesh._id]; - r += ''; // Collapse action + r += ''; // Collapse action r += '' + EscapeHtml(mesh.name) + ''; r += getMeshActions(mesh, meshrights); @@ -2957,12 +2967,12 @@ } if (mesh.mtype == 2) { r += ''; - if (view == 1) { r += '
'; } // Open collapse div + r += '
'; // Open collapse div r += '
' + "No devices in this group"; if ((meshrights & 4) != 0) { r += ', ' + "add one" + ''; } } r += '.
'; - if (view == 1) { r += '
'; } // End collapsing area + r += '
'; // End collapsing area current = mesh._id; count++; @@ -3074,11 +3084,22 @@ oldviewmode = view; } - function toggleCollapseGroup(id, id2) { - var x = (QS('DevxCol' + id)['display'] == 'none'); - if (x) { delete CollapsedGroups[id2]; } else { CollapsedGroups[id2] = true; } + function toggleCollapseGroup(id, id2, type) { + var x; + if (type == 2) { + // Table rows collapse + var rows = document.getElementsByName('DevxCol' + id2); + if (rows.length == 0) return; + x = (rows[0].style['display'] == 'none'); + if (x) { delete CollapsedGroups[id2]; } else { CollapsedGroups[id2] = true; } + for (var i = 0; i < rows.length; i++) { rows[i].style['display'] = (x ? '' : 'none'); } + } else { + // Simple DIV collapse + x = (QS('DevxCol' + id)['display'] == 'none'); + if (x) { delete CollapsedGroups[id2]; } else { CollapsedGroups[id2] = true; } + QV('DevxCol' + id, x); + } Q('DevxColImg' + id).src = x?'images/c2.png':'images/c1.png'; - QV('DevxCol' + id, x); putstore('_collapse', JSON.stringify(CollapsedGroups)); }