Repository navigation
ATAK Vessel Iconset download card (QR + direct link) + AISCOT 7.3.0 config params - #65
Conversation
…OT 7.3.0 config params New expandable card offers the AIS-catcher style ship-class iconset (ais-ships-iconset.zip, bundled with AISCOT >= 7.3.0): - qrtak-style import QR (tak://com.atakmap.app/import?url=...) - scan with ATAK or the device camera to download & import directly - regular download link for manual import via Settings -> Tool Preferences -> Point Dropper -> Iconset Manager QR rendered as SVG via qrcode-generator (MIT, zero deps). URL/QR logic lives in cockpit-free src/iconset.ts so vitest covers it. Also surfaces the four new AISCOT 7.3.0 configuration parameters in the config form: VESSEL_NAME_PREFIX, SHIPCLASS_COLORS, SHIPCLASS_ICONS, UNDERWAY_ONLY. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Review fixes for the iconset card: - ICONSET_URL now pins to the aiscot release tag (v7.3.0) instead of tracking main HEAD: main 404s until the aiscot PR merges, and a branch URL could later serve a zip whose layout no longer matches the iconsetpath values the installed aiscot emits. - Note in the card that both options need github.com reachability and that the same zip ships on-box with the aiscot package for offline networks. - QR SVG is computed once at module load instead of on every render; drop the hardcoded "19 icons" count; open the download cross-origin link in a new tab (the download attribute is ignored cross-origin and would otherwise navigate Cockpit's frame away). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DVibvSyvPsUXRXRYaFsWjY
ampledata
left a comment
There was a problem hiding this comment.
Reviewed (self-authored, posting as comment). Code is clean: URL/QR logic isolated and unit-tested, QR is compile-time-constant SVG (no XSS surface), external link uses rel="noopener noreferrer", new params match aiscot's constants.
Merge-sequencing gate: src/iconset.ts pins ICONSET_VERSION = 'v7.3.0' and the raw URL currently 404s (latest aiscot tag is v7.2.1). Merge order must be: aiscot #15 -> tag/release v7.3.0 -> this PR; otherwise the card ships a dead QR/link with no in-UI failure signal.
Minor: dangerouslySetInnerHTML for the QR SVG is safe today (constant input) but a latent foot-gun if qrSvg() is ever reused with dynamic input — consider an <img src="data:image/svg+xml,..."> or a comment stating the invariant. The download attribute on the cross-origin anchor is ignored by browsers. Hardcoded #888 caption may look off in dark mode.
🤖 Generated with Claude Code
Part of a fleet-wide sweep to make every cockpit-* sensor plugin match one UI standard: the dark AryaOS operations-console theme, >=48px (3rem) touch targets on all buttons and form controls for gloved field use on mobile, and a unified 760px responsive breakpoint (action buttons wrap to full width on phones; desktop layout unchanged). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DVibvSyvPsUXRXRYaFsWjY
Summary
Companion to snstac/aiscot#15 (AIS-catcher style vessel styling).
ATAK Vessel Iconset card
New expandable card between the TLS card and the configuration form, offering the ship-class ATAK iconset (
ais-ships-iconset.zip) two ways:tak://com.atakmap.app/import?url=…). Scan with ATAK's QR scanner or the device camera and the client downloads & imports the iconset directly (device needs internet; the zip is fetched from the aiscot GitHub repo).The QR is rendered as an inline SVG with
qrcode-generator(MIT, zero dependencies, +1 package in the lockfile). URL constants and QR generation live in cockpit-freesrc/iconset.tsso they're unit-testable under vitest's node environment.New configuration parameters
The config form now surfaces AISCOT 7.3.0's four new parameters:
VESSEL_NAME_PREFIX,SHIPCLASS_COLORS,SHIPCLASS_ICONS(the card's instructions point users at it once clients have the iconset), andUNDERWAY_ONLY.Test plan
npm run test— 7 passed (3 new: download URL shape, ATAK import intent encoding, QR SVG generation)npm run eslint/npm run stylelint— cleanmake dist— production bundle builds; new card present indist/index.js.gz🤖 Generated with Claude Code