feat: remove hidden sessions section from settings panel (task-12)
Remove the Hidden Sessions checkbox list from the Sessions settings tab. The feature is superseded by the Hidden view + tile flyout (Phase 3), which is accessible via the sidebar view dropdown. Changes: - muxplex/frontend/index.html: Remove #setting-hidden-sessions div block - muxplex/frontend/app.js: Remove hidden sessions checkbox population block from openSettings() and delegated change handler from bindStaticEventListeners() - muxplex/tests/test_frontend_html.py: Remove old test_html_sessions_panel_has_hidden_sessions_container (for removed element); add test_no_hidden_sessions_checkbox_list_in_settings asserting element no longer exists - muxplex/tests/test_frontend_js.py: Remove test_bind_static_event_listeners_uses_delegated_handler_for_hidden_sessions and test_settings_hidden_sessions_uses_session_key (for removed JS code)
This commit is contained in:
@@ -2230,27 +2230,6 @@ function openSettings() {
|
||||
sortOrderEl.value = ss.sort_order;
|
||||
}
|
||||
|
||||
// Hidden sessions checkboxes
|
||||
const hiddenSessionsEl = $('setting-hidden-sessions');
|
||||
if (hiddenSessionsEl) {
|
||||
hiddenSessionsEl.innerHTML = '';
|
||||
const hiddenList = (ss && ss.hidden_sessions) || [];
|
||||
(_currentSessions || []).forEach(function(s) {
|
||||
const name = s.name || '';
|
||||
const sessionKey = s.sessionKey || name;
|
||||
const item = document.createElement('label');
|
||||
item.className = 'settings-checkbox-item';
|
||||
const cb = document.createElement('input');
|
||||
cb.type = 'checkbox';
|
||||
cb.className = 'settings-checkbox';
|
||||
cb.value = sessionKey;
|
||||
cb.checked = hiddenList.includes(sessionKey) || hiddenList.includes(name);
|
||||
item.appendChild(cb);
|
||||
item.appendChild(document.createTextNode(' ' + name));
|
||||
hiddenSessionsEl.appendChild(item);
|
||||
});
|
||||
}
|
||||
|
||||
// Window size largest
|
||||
const windowSizeEl = $('setting-window-size-largest');
|
||||
if (windowSizeEl) {
|
||||
@@ -2973,20 +2952,6 @@ function bindStaticEventListeners() {
|
||||
if (el) patchServerSetting('auto_open_created', el.checked);
|
||||
});
|
||||
|
||||
// Hidden sessions — delegated handler on container (checkboxes are dynamic)
|
||||
var hiddenSessionsContainer = $('setting-hidden-sessions');
|
||||
if (hiddenSessionsContainer) {
|
||||
hiddenSessionsContainer.addEventListener('change', function(e) {
|
||||
var cb = e.target.closest('input[type="checkbox"]');
|
||||
if (!cb) return;
|
||||
var hidden = [];
|
||||
hiddenSessionsContainer.querySelectorAll('input[type="checkbox"]').forEach(function(c) {
|
||||
if (c.checked) hidden.push(c.value);
|
||||
});
|
||||
patchServerSetting('hidden_sessions', hidden);
|
||||
});
|
||||
}
|
||||
|
||||
// Notifications settings — bell sound toggle persists to server settings
|
||||
on($('setting-bell-sound'), 'change', function() {
|
||||
if (_serverSettings) _serverSettings.bellSound = this.checked;
|
||||
|
||||
@@ -201,10 +201,6 @@
|
||||
<button id="notification-request-btn" class="settings-action-btn">Request Permission</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="settings-field settings-field--column">
|
||||
<label class="settings-label">Hidden Sessions</label>
|
||||
<div id="setting-hidden-sessions" class="settings-checkbox-list"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="settings-panel hidden" data-tab="views">
|
||||
<div id="views-settings-list" class="views-settings-list"></div>
|
||||
|
||||
@@ -629,18 +629,6 @@ def test_html_sessions_panel_has_sort_order_select() -> None:
|
||||
assert v in values, f"#setting-sort-order missing option value='{v}'"
|
||||
|
||||
|
||||
def test_html_sessions_panel_has_hidden_sessions_container() -> None:
|
||||
"""Sessions panel must contain a #setting-hidden-sessions container for checkboxes."""
|
||||
soup = _SOUP
|
||||
dialog = soup.find(id="settings-dialog")
|
||||
assert dialog is not None, "Missing #settings-dialog"
|
||||
sessions_panel = dialog.find(
|
||||
class_="settings-panel", attrs={"data-tab": "sessions"}
|
||||
)
|
||||
assert sessions_panel is not None, "Missing sessions settings-panel"
|
||||
el = sessions_panel.find(id="setting-hidden-sessions")
|
||||
assert el is not None, "Missing #setting-hidden-sessions inside sessions panel"
|
||||
|
||||
|
||||
def test_html_sessions_panel_has_window_size_largest_checkbox() -> None:
|
||||
"""Sessions panel must contain a #setting-window-size-largest checkbox."""
|
||||
@@ -1532,3 +1520,17 @@ def test_no_filtered_option_in_view_mode_select() -> None:
|
||||
assert "filtered" not in values, (
|
||||
"View mode select must not contain a 'filtered' option (removed in task-11)"
|
||||
)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# Remove Hidden Sessions Section from Settings Panel (task-12)
|
||||
# ============================================================
|
||||
|
||||
|
||||
def test_no_hidden_sessions_checkbox_list_in_settings() -> None:
|
||||
"""#setting-hidden-sessions must not exist in HTML (replaced by Hidden view + tile flyout)."""
|
||||
el = _SOUP.find(id="setting-hidden-sessions")
|
||||
assert el is None, (
|
||||
"#setting-hidden-sessions must be removed from the settings panel "
|
||||
"(replaced by the Hidden view + tile flyout in Phase 3)"
|
||||
)
|
||||
|
||||
@@ -1273,21 +1273,6 @@ def test_bind_static_event_listeners_binds_auto_open_change() -> None:
|
||||
)
|
||||
|
||||
|
||||
def test_bind_static_event_listeners_uses_delegated_handler_for_hidden_sessions() -> (
|
||||
None
|
||||
):
|
||||
"""bindStaticEventListeners must use delegated change handler on #setting-hidden-sessions."""
|
||||
match = re.search(
|
||||
r"function bindStaticEventListeners\s*\(\s*\)\s*\{(.*?)\n\}",
|
||||
_JS,
|
||||
re.DOTALL,
|
||||
)
|
||||
assert match, "bindStaticEventListeners function not found"
|
||||
body = match.group(1)
|
||||
assert "setting-hidden-sessions" in body, (
|
||||
"bindStaticEventListeners must use delegated handler on setting-hidden-sessions"
|
||||
)
|
||||
|
||||
|
||||
def test_exports_load_server_settings() -> None:
|
||||
"""module.exports must export loadServerSettings."""
|
||||
@@ -2989,28 +2974,6 @@ def test_create_device_select_uses_device_id_for_option_value() -> None:
|
||||
)
|
||||
|
||||
|
||||
def test_settings_hidden_sessions_uses_session_key() -> None:
|
||||
"""Settings hidden_sessions checkbox must use sessionKey for the checkbox value.
|
||||
|
||||
The hidden_sessions list now stores device_id:name keys (sessionKey format).
|
||||
The settings panel checkbox builder must use s.sessionKey || s.name as the
|
||||
checkbox value so toggling a remote session stores the correct key format.
|
||||
"""
|
||||
match = re.search(
|
||||
r"const hiddenSessionsEl = \$\('setting-hidden-sessions'\);.*?hiddenSessionsEl\.innerHTML = ''",
|
||||
_JS,
|
||||
re.DOTALL,
|
||||
)
|
||||
assert match, "hidden sessions settings block not found"
|
||||
# Find the wider block starting from here
|
||||
start = match.start()
|
||||
block = _JS[start : start + 800]
|
||||
assert "sessionKey" in block, (
|
||||
"Settings panel hidden_sessions checkbox builder must use s.sessionKey "
|
||||
"(with s.name fallback) as the checkbox value so remote sessions are "
|
||||
"stored in device_id:name format in hidden_sessions"
|
||||
)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Active view state variable and getVisibleSessions (task-2-active-view)
|
||||
|
||||
Reference in New Issue
Block a user