reading...
| API | Present? |
|---|---|
| EventSource (SSE) | |
| WebSocket | |
| fetch | |
| localStorage | |
| sessionStorage | |
| Touch events | |
| Pointer events | |
| CSS transitions |
Tests below hit /echo/ws, /echo/sse, /echo/poll on this
same origin.
— not started —
— not started —
— not started —
Press any key, hardware page-turn button, or 5-way joystick:
| key | keyCode | code | type |
|---|
These determine whether crypto.randomUUID() works. x-reader calls it during init
— a failure here causes a blank page.
| Check | Result |
|---|---|
| isSecureContext | |
| window.crypto present | |
| crypto.getRandomValues | |
| crypto.randomUUID present | |
| crypto.randomUUID() call result |
x-reader bundles to an ES2017 IIFE. These JS features must work.
| Feature | Present? |
|---|---|
| Promise | |
| Symbol | |
| Proxy | |
| URL constructor | |
| async / await | |
| Arrow functions | |
| Nullish coalescing (??) | |
| Optional chaining (?.) | |
| class syntax | |
| WeakMap | |
| WeakSet | |
| queueMicrotask (Svelte scheduler) | |
| TextEncoder |
x-reader's IIFE uses <script defer> so it runs after the DOM is parsed. If
defer is broken the app never mounts (blank page, no error).
| Check | Result |
|---|---|
| defer script executed | waiting… |
| DOM ready when defer runs | waiting… |
Cross-origin images are hotlinked from source CDNs (web-reader relies on this). OK = rendered, FAIL = blocked (CORP / hotlink protection / unsupported format).
| Source | Image | Result | Notes | |
|---|---|---|---|---|
| Control (data URI) | Loading… | baseline test — embedded PNG | ||
| GitHub | Loading… | avatars.githubusercontent.com | ||
| Wikimedia | Loading… | upload.wikimedia.org | ||
| Vietnamese news | Loading… | webp — FAIL here is likely format, not CORP | ||
| — | user photos are CORP: same-origin; paste a fresh signed URL |
Test any image URL:
| Source | Image | Result | Notes |
|---|
web-reader wants a true book-style paginator (CSS multi-column layout, one page turn = one column). These checks are automated — no on-device eyeballing needed, just read the table.
| Check | Result |
|---|---|
column-width in style (unprefixed) |
|
-webkit-column-width in style |
|
| Multi-column actually splits content (functional) | |
transform in style (unprefixed) |
|
-webkit-transform in style |
|
| Transform actually moves the layout box (functional) | |
Programmatic scrollLeft works on overflow:hidden |
|
document.fonts API present |
|
document.fonts.ready is a thenable |
Real book-style page turn on real text. Use Prev/Next to page. Use "Switch mode" to flip
between the two page-turn candidates (transform: translateX() vs
scrollLeft) and watch the e-ink screen for flicker/ghosting differences — that
judgment call needs your eyes, not a script. Use A− / A+ to confirm reflow: page count and
position should recompute, not just visually break.
— not initialized —