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;
|
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
|
// Window size largest
|
||||||
const windowSizeEl = $('setting-window-size-largest');
|
const windowSizeEl = $('setting-window-size-largest');
|
||||||
if (windowSizeEl) {
|
if (windowSizeEl) {
|
||||||
@@ -2973,20 +2952,6 @@ function bindStaticEventListeners() {
|
|||||||
if (el) patchServerSetting('auto_open_created', el.checked);
|
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
|
// Notifications settings — bell sound toggle persists to server settings
|
||||||
on($('setting-bell-sound'), 'change', function() {
|
on($('setting-bell-sound'), 'change', function() {
|
||||||
if (_serverSettings) _serverSettings.bellSound = this.checked;
|
if (_serverSettings) _serverSettings.bellSound = this.checked;
|
||||||
|
|||||||
@@ -201,10 +201,6 @@
|
|||||||
<button id="notification-request-btn" class="settings-action-btn">Request Permission</button>
|
<button id="notification-request-btn" class="settings-action-btn">Request Permission</button>
|
||||||
</div>
|
</div>
|
||||||
</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>
|
||||||
<div class="settings-panel hidden" data-tab="views">
|
<div class="settings-panel hidden" data-tab="views">
|
||||||
<div id="views-settings-list" class="views-settings-list"></div>
|
<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}'"
|
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:
|
def test_html_sessions_panel_has_window_size_largest_checkbox() -> None:
|
||||||
"""Sessions panel must contain a #setting-window-size-largest checkbox."""
|
"""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, (
|
assert "filtered" not in values, (
|
||||||
"View mode select must not contain a 'filtered' option (removed in task-11)"
|
"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:
|
def test_exports_load_server_settings() -> None:
|
||||||
"""module.exports must export loadServerSettings."""
|
"""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)
|
# Active view state variable and getVisibleSessions (task-2-active-view)
|
||||||
|
|||||||
Reference in New Issue
Block a user