phimpal-tv 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +8 -0
  2. package/mod.js +16 -4
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -120,6 +120,14 @@ swallow all input — that looked like a frozen cursor with a dead Return key. S
120
120
  - (0.2.2) a navigation scope (dialog/menu) now has to be on screen **and** contain something
121
121
  focusable; an element merely carrying `role="dialog"` cannot trap the keys any more, and a
122
122
  scope that refuses to close is ignored afterwards.
123
+ - (0.2.3) **low-gfx rendering** on the TV: all CSS transitions, `backdrop-filter`, and the
124
+ filters/shadows on the card popup and the player are removed. A freeze with no error and no
125
+ trace points at the renderer, not at the script — TV compositors are known to stall on
126
+ `backdrop-blur` and on a 500 ms transform over a row of 4K posters. Restore the site's
127
+ effects with `localStorage['tv-gfx'] = 'full'`.
128
+ - (0.2.3) the running **version is announced** bottom-right for 2 s at startup
129
+ (`PhimPal TV 0.2.3 · low-gfx`). If you don't see the version you just published, TizenBrew
130
+ is still serving a cached module: remove and re-add it in the module manager.
123
131
 
124
132
  ## Known limits
125
133
 
package/mod.js CHANGED
@@ -1,4 +1,4 @@
1
- // PhimPal TV v0.2.2 — generated by build.js from phimpal-tv.user.js, do not edit.
1
+ // PhimPal TV v0.2.3 — generated by build.js from phimpal-tv.user.js, do not edit.
2
2
  // TizenBrew site-modification module for https://phimpal.com/
3
3
  (function registerRemoteKeys() {
4
4
  try {
@@ -13,9 +13,11 @@
13
13
 
14
14
  // ------------------------------------------------------------------ config
15
15
  const CFG = {
16
+ version: '0.2.3',
16
17
  keyboardEmulation: false, // remote key codes only
17
18
  debug: (function () { try { return localStorage.getItem('tv-debug') === '1'; } catch (e) { return false; } })(), // badge off unless asked
18
19
  hideCursor: true, // the D-pad replaces the pointer
20
+ lowGfx: (function () { try { return localStorage.getItem('tv-gfx') !== 'full'; } catch (e) { return true; } })(), // flat rendering unless tv-gfx=full
19
21
  seekSteps: [10, 30, 60, 300], // seconds per press, accelerates while you keep pressing
20
22
  seekAccelWindow: 800, // ms between presses to accelerate
21
23
  chanSeek: 300, // Channel up/down step inside seek mode, seconds
@@ -332,7 +334,7 @@
332
334
  trace('page settled target=' + describe(t));
333
335
  if (t) setFocus(t); else badge('page: no card');
334
336
  trace('page done');
335
- }), CFG.carouselAnimMs);
337
+ }), CFG.lowGfx ? 80 : CFG.carouselAnimMs); // no transition to wait for in low-gfx mode
336
338
  return true;
337
339
  }
338
340
  function rowsOnPage() {
@@ -962,7 +964,15 @@
962
964
  pointer-events: none; opacity: 0; transition: opacity .3s; }
963
965
  #tv-badge { position: fixed; top: 12px; right: 12px; z-index: 2147483647; font: 13px/1.2 ui-monospace, monospace; padding: 6px 10px;
964
966
  background: rgba(0,0,0,.75); color: #fff; border-radius: 6px; pointer-events: none; opacity: 0; transition: opacity .3s; white-space: pre; }
965
- ` + (CFG.hideCursor ? '\n html, body, * { cursor: none !important; }' : '');
967
+ ` + (CFG.hideCursor ? '\n html, body, * { cursor: none !important; }' : '')
968
+ + (CFG.lowGfx ? `
969
+ /* TV compositors stall on backdrop-filter, large filters and animated transforms over
970
+ a dozen 4K posters: render everything flat and instant. */
971
+ *, *::before, *::after { transition: none !important; animation-duration: 0s !important;
972
+ backdrop-filter: none !important; -webkit-backdrop-filter: none !important; }
973
+ .group.tv-focus .group-hover\\:block, .video-js, .video-js * { filter: none !important; box-shadow: none !important; }
974
+ header { background: rgba(10, 12, 20, .96) !important; }
975
+ .tv-focus-ring { box-shadow: none; }` : '');
966
976
  // Chromium < 90 ignores `overflow-x: clip`, which would spill every carousel across the
967
977
  // page; `hidden` is the closest thing it understands.
968
978
  let clipOk = true; try { clipOk = CSS.supports('overflow-x', 'clip'); } catch (e) { clipOk = false; }
@@ -985,7 +995,9 @@
985
995
  if (window.__tvNav && window.__tvNav.destroy) window.__tvNav.destroy(); // hot re-install (dev)
986
996
  injectCSS();
987
997
  showPreviousTrace();
988
- trace('init ' + location.pathname + ' ' + innerWidth + 'x' + innerHeight);
998
+ trace('init ' + CFG.version + ' ' + location.pathname + ' ' + innerWidth + 'x' + innerHeight);
999
+ // always announce the running build once, so a stale module cache is obvious
1000
+ setTimeout(() => badge('PhimPal TV ' + CFG.version + (CFG.lowGfx ? ' · low-gfx' : ''), true), 800);
989
1001
  addEventListener('keydown', onKeySafe, true);
990
1002
  patchHistory();
991
1003
  const onRouteSafe = safe('route', checkRoute);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "phimpal-tv",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "D-pad (TV remote) navigation for phimpal.com on Samsung Tizen TVs, as a TizenBrew site-modification module.",
5
5
  "appName": "PhimPal TV",
6
6
  "packageType": "mods",