|
1 | | -# Worklog — v1.10.15 (in progress) |
| 1 | +# Worklog — v1.10.16 (in progress) |
2 | 2 |
|
3 | 3 | ## Added |
4 | | -- **Group identical spools (Table) — view-only.** Identical spools now collapse into one expandable ×N entry in the inventory **Table** (folder/sub-folder metaphor). Grouping is purely a render-time construct — no Firestore change, `state.rows` untouched, physical-spool stats unchanged. Key: cloud → never grouped; TigerTag+ → same `id_product` (purely — `0`/max unset falls through to the attribute key; divergent ids on chips sharing an id_product are corrected by "Refresh from API", not the grouping key); Maker (id_tigertag = max sentinel) → brand + material + exact hex + aspect (finish); other non-plus → brand + material + exact hex. An always-visible **switch** in the inventory toolbar (icon-only + hover bubble, no text) flips it — state persisted in `localStorage` (`tigertag.inv.group`, default ON) **and synced to Firestore** `users/{uid}/prefs/app.groupInv` (cross-device, mirrors the lang pref). Groups are collapsed by default; clicking a header expands its members (indented rows, each still clickable → detail panel). Search/filter auto-expands matching members and keeps a group only if ≥1 member matches. Keyed-diff + surgical weight patch preserved (members keep `data-id=spoolId`). `renderer/inventory.js`, `renderer/inventory.html`, `css/70-detail-misc.css` *(Grid + group panel = Phase 2, not yet done)* |
5 | | -- **App-update notification.** When an update is available (downloading) or **ready**, the notification bell now shows a notice — the "ready" one has a **Restart** button (→ `installUpdate()`). Implemented as a per-install **local** notification (`state.localNotifications`, NOT Firestore; survives account switches), wired from the existing `onUpdateStatus` events and counted in the bell's unread badge. `renderer/inventory.js`, `css/20-friends.css` |
| 4 | +- **"What's New" — floating window (draggable + resizable).** The explainer is now a browser-like floating window: drag it by the title bar, resize from the bottom-right grip, and it remembers its size/position (`localStorage tigertag.whatsnew.win`). Restyled — title bar with an accent badge + a version picker pill, a per-version release-note heading ("Tiger Studio Manager X Public Release Note", localised, updates with the picker), items with icons in soft colour chips, sticky footer. `renderer/inventory.html`, `renderer/inventory.js` (`_initWhatsNewWindow`, `_placeWhatsNewWin`), `css/60-modals.css` |
| 5 | +- **"What's New" modal (per-version changelog explainer).** After an update, a dedicated window surfaces the new features in vulgarised language, shown **once per version** (compares the running `appVersion` to `localStorage tigertag.whatsnew.seen`). **"Got it"** marks the version seen; **"Later"** / ✕ / backdrop leave it unseen so it returns next launch. Re-openable any time from **Settings → About → "What's New"**. Content lives in `data/whatsnew.json` (keyed by version, **9 locales inline**, full history kept); auto-trigger is skipped while a blocking modal (login / display-name) is open. **Browsable history**: a version picker in the modal lets the user read any past release's notes (newest-first). The full back-catalogue (71 versions) was imported from `CHANGELOG.md` as an **English baseline** (the UI falls back to EN when a locale is missing); v1.10.13–1.10.15 are hand-localised to 9 locales. Release tooling: `npm run whatsnew:add -- <ver>` scaffolds an empty 9-locale entry, `npm run whatsnew:import` backfills all CHANGELOG versions (EN, never overwrites existing localised ones), `npm run whatsnew:check` verifies completeness (EN mandatory; an entry is either EN-only or fully 9-locale — no half-translated states). `scripts/whatsnew-import-changelog.mjs` `renderer/inventory.html`, `renderer/inventory.js`, `css/60-modals.css`, `data/whatsnew.json`, `scripts/whatsnew-add.mjs`, `scripts/whatsnew-check.mjs` |
6 | 6 |
|
7 | 7 | ## Changed |
8 | | -- **"Refresh from API" now re-syncs the full catalogue identity.** In addition to name/sku/barcode/series/image/colour-list/links/flags, it now also rewrites **brand (`id_brand`), material (`id_material`), aspect1/2 (`id_aspect1/2`), print temperatures (nozzle/bed/dryer → `data2..data7`) and the colour RGBA (`color_r/g/b/a`)** from the TigerTag+ product. The API returns string labels so a reverse lookup (`_dbIdByLabel`) resolves them back to local TigerTag DB ids. This corrects chips whose ids drifted from the catalogue (the root cause of two spools sharing one `id_product` but showing different brand/material). When a chip-stored field actually changes, the spool is flagged `needUpdateAt` (chip-pending badge) so the user knows to re-burn the physical tag — only when a value really differs, never for already-in-sync chips, never for Cloud. `renderer/inventory.js` (`_refreshApiData`, `_dbIdByLabel`, `_hexToRgba`) |
9 | | -- **Fill bar coloured by % remaining (iso with Flutter mobile).** The filament-available bar now changes colour by remaining percentage — `<20%` red `#F44336`, `<50%` orange `#FF9800`, `≥50%` green `#4CAF50` (Material palette, matching the mobile app). Applied everywhere: Table rows, group header (aggregate), Grid cards, and the detail-panel weight bar (static + live slider drag + snapshot patch). `renderer/inventory.js` (`fillBarColor`) |
| 8 | +- **No more emojis in the UI — replaced by SVG icons or plain text.** Swept the renderer free of true emojis: the "What's New" item icons are SVG icon-set names (not emojis); locale strings (`welcomeBack`, `mobileApp`, `badgeRecycled`, `setupNameSave`, `tutoOpenBtn`, `tigerPodCta`) had their emojis stripped across all 9 locales; `inventory.html` greeting/label/option fallbacks + language-picker flags removed (flags can't be SVG inside native `<option>` → kept the language name); copy button (📋→`icon-copy`) and display-name hero (👋→`icon-user`); printer modules — Bambu humidity (💧→`icon-droplets`), Creality time-left (⏳→`SNAP_ICON_CLOCK`), TigerScale status badges (emoji→text, colour conveys state); plus emoji in comments/CSS. Monochrome functional glyphs (✕ ✓ ▲ ▼ arrows, box-drawing) intentionally left. `renderer/**` (locales, inventory.html, inventory.js, css/70-detail-misc.css, printers/*, IoT/tigerscale) |
10 | 9 |
|
11 | 10 | ## Fixed |
| 11 | +- **"Set Color & TD Value" modal is now draggable.** Drag it by its header (clamped to the viewport, re-centered on each open). Added a reusable `_makeDraggableModal(overlayId, cardSel, handleSel)` helper. Blur removed behind it + the "TD1S Sensor" and "What's New" overlays (dim only). `renderer/inventory.js`, `css/60-modals.css` |
| 12 | +- **Spool grouping: TigerCloud now groups with TigerTag (Maker).** Cloud entries were never grouped (key returned `null`). They're now treated exactly like Maker chips — both use the attribute key `diy:brand|material|colorHex|aspect1` — so a Cloud spool and a Maker spool of the same filament collapse into one group. Only TigerTag+ still groups by `id_product`. `renderer/inventory.js` (`_spoolGroupKey`) |
12 | 13 |
|
13 | 14 | ## Removed |
14 | 15 |
|
15 | 16 | ## i18n |
16 | | -- Added: `notifUpdateAvailable`, `notifUpdateReady` — 9 locales |
17 | | -- Added: `invGroupToggle`, `invGroupCount`, `invGroupOn`, `invGroupOff` — 9 locales |
| 17 | +- Added: `whatsNewTitle`, `whatsNewReleaseTitle`, `whatsNewGotIt`, `whatsNewLater`, `whatsNewEmpty` — 9 locales |
0 commit comments