Files
cv-site/tests/mjs/61-sidebar-positioning-debug.mjs
T
juanatsap 82f73cf724 fix: CRITICAL - Restore sidebar visibility in landscape mode
Fixed critical issue where sidebars were completely collapsed/hidden
in landscape mode, showing only 33px accordion headers instead of full content.

ROOT CAUSE:
- Sidebar accordions (<details> elements) were collapsed by default
- Native <details> browser behavior prevented CSS-only expansion
- Sidebar content was present but hidden behind collapsed accordion

SOLUTION:
1. JavaScript: Added handleLandscapeAccordions() to auto-open sidebar
   accordions when in landscape orientation (≤915px width)
   - Runs on DOMContentLoaded, orientationchange, and resize events
   - Uses matchMedia to detect landscape mode
   - Sets 'open' attribute on all .sidebar-accordion elements

2. CSS: Enhanced sidebar container styles in landscape mode
   - Set overflow: visible on sidebars (was hidden)
   - Set height: auto on sidebars and .actual-content wrappers
   - Forced accordion content visibility with !important rules
   - Made summary non-clickable in landscape (pointer-events: none)

3. Tests: Updated landscape test to validate sidebar visibility
   - Now checks sidebar visible/hidden state
   - Validates sidebar height (should be >100px, not 33px)
   - Added debug tests for troubleshooting

RESULTS:
- Sidebar height: 1387px (Android) / 1536px (iPhone) ✓
- Accordion state: OPEN ✓
- All sidebar content fully visible ✓
- No horizontal scroll ✓

Test files:
- tests/mjs/54-landscape-mode-test.mjs (updated with sidebar checks)
- tests/mjs/60-sidebar-content-debug.mjs (new debug test)
- tests/mjs/61-sidebar-positioning-debug.mjs (positioning debug)
- tests/mjs/62-sidebar-computed-height-debug.mjs (height debug)
- tests/mjs/63-media-query-match-test.mjs (media query validation)
2025-11-25 05:44:40 +00:00

77 lines
3.5 KiB
JavaScript
Executable File

#!/usr/bin/env node
import { chromium } from 'playwright';
const LANDSCAPE_VIEWPORT = { width: 667, height: 375 };
(async () => {
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({
viewport: LANDSCAPE_VIEWPORT,
userAgent: 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36',
hasTouch: true
});
const page = await context.newPage();
await page.goto('http://localhost:1999/?lang=en&view=extended');
await page.waitForLoadState('networkidle');
const positioning = await page.evaluate(() => {
const sidebar = document.querySelector('.cv-sidebar-left');
const accordion = document.querySelector('.sidebar-accordion');
const content = document.querySelector('.sidebar-accordion-content');
return {
sidebar: {
position: window.getComputedStyle(sidebar).position,
overflow: window.getComputedStyle(sidebar).overflow,
overflowY: window.getComputedStyle(sidebar).overflowY,
height: window.getComputedStyle(sidebar).height,
maxHeight: window.getComputedStyle(sidebar).maxHeight,
},
accordion: {
position: window.getComputedStyle(accordion).position,
display: window.getComputedStyle(accordion).display,
overflow: window.getComputedStyle(accordion).overflow,
height: window.getComputedStyle(accordion).height,
maxHeight: window.getComputedStyle(accordion).maxHeight,
},
content: {
position: window.getComputedStyle(content).position,
display: window.getComputedStyle(content).display,
overflow: window.getComputedStyle(content).overflow,
height: window.getComputedStyle(content).height,
maxHeight: window.getComputedStyle(content).maxHeight,
top: window.getComputedStyle(content).top,
left: window.getComputedStyle(content).left,
}
};
});
console.log('Positioning Debug:\n');
console.log('Sidebar (.cv-sidebar-left):');
console.log(` • position: ${positioning.sidebar.position}`);
console.log(` • overflow: ${positioning.sidebar.overflow}`);
console.log(` • overflowY: ${positioning.sidebar.overflowY}`);
console.log(` • height: ${positioning.sidebar.height}`);
console.log(` • max-height: ${positioning.sidebar.maxHeight}\n`);
console.log('Accordion (.sidebar-accordion):');
console.log(` • position: ${positioning.accordion.position}`);
console.log(` • display: ${positioning.accordion.display}`);
console.log(` • overflow: ${positioning.accordion.overflow}`);
console.log(` • height: ${positioning.accordion.height}`);
console.log(` • max-height: ${positioning.accordion.maxHeight}\n`);
console.log('Content (.sidebar-accordion-content):');
console.log(` • position: ${positioning.content.position}`);
console.log(` • display: ${positioning.content.display}`);
console.log(` • overflow: ${positioning.content.overflow}`);
console.log(` • height: ${positioning.content.height}`);
console.log(` • max-height: ${positioning.content.maxHeight}`);
console.log(` • top: ${positioning.content.top}`);
console.log(` • left: ${positioning.content.left}\n`);
await browser.close();
})();