|
43 | 43 | <div id="app" class="frame"></div> |
44 | 44 | <script> |
45 | 45 | (function() { |
46 | | - const sampleData = {"status": 0, "message": "heavy refresh rate limited", "timestamp": 1772605145, "poll": {"type": "heavy"}, "groups": [{"service_group_id": 1, "status": 0, "message": "", "modem_count": 25, "success_count": 22, "failure_count": 3, "modems": {"20:6a:94:d7:d3:70": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "74:9b:e8:11:ed:70": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "a8:4e:3f:37:3e:30": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "1c:ab:c0:9d:d6:00": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "20:6a:94:34:63:f4": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "20:6a:94:d7:d3:60": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "38:ad:2b:3e:86:54": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "38:ad:2b:3e:87:7c": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "60:6c:63:f4:64:f8": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "74:9b:e8:72:7a:54": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "84:0b:7c:0b:e5:48": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "90:aa:c3:4b:75:60": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "90:aa:c3:8a:bd:18": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "90:aa:c3:c9:d0:d0": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "b0:f5:30:b7:76:30": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "dc:36:0c:79:f1:8c": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "dc:36:0c:ee:ce:e0": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "f8:1d:0f:cd:a0:f0": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "f8:34:5a:53:27:48": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "f8:34:5a:7f:d6:80": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "f8:34:5a:80:84:12": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "f8:34:5a:83:35:34": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "fc:77:7b:11:8f:da": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "fc:77:7b:ca:7b:10": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "fc:77:7b:cc:04:b0": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}}}]}; |
| 46 | + const sampleData = {"status": 0, "message": "heavy refresh rate limited", "timestamp": 1772605145, "poll": {"type": "heavy"}, "groups": [{"service_group_id": 1, "status": 0, "message": "", "modem_count": 25, "success_count": 22, "failure_count": 3, "modems": {"aa:bb:cc:dd:ee:00": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:01": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:02": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:03": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:04": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:05": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:06": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:07": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:08": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:09": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:0a": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:0b": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:0c": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:0d": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:0e": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:0f": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:10": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:11": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:12": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:13": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:14": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:15": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:16": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:17": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}, "aa:bb:cc:dd:ee:18": {"sysdescr": {"HW_REV": "1.0", "VENDOR": "LANCity", "BOOTR": "NONE", "SW_REV": "1.0.0", "MODEL": "LCPET-3"}}}}]}; |
47 | 47 | const visualSource = "// Postman Visualizer: PyPNM-CMTS/ServingGroup/CableModem/Operations/getSysDescr\n// Last Update: 2026-03-03 23:48:00 MST\n// Visual Constraints: Follow canonical visual rules in CODING_AGENTS.md.\n\nconst response = pm.response.json() || {};\n\nfunction safeText(value, fallback) {\n const fb = fallback == null ? 'N/A' : fallback;\n if (value == null) return fb;\n const s = String(value).trim();\n return s ? s : fb;\n}\n\nfunction sanitizeMac(value) {\n const raw = safeText(value, 'N/A');\n if (raw === 'N/A') return raw;\n const compact = raw.replace(/[^0-9a-f]/gi, '').toLowerCase();\n if (compact.length !== 12) return raw.toLowerCase();\n return compact.match(/.{1,2}/g).join(':');\n}\n\nfunction fmtUtc(epochSec) {\n const n = Number(epochSec);\n if (!Number.isFinite(n)) return 'N/A';\n const d = new Date(n * 1000);\n if (!Number.isFinite(d.getTime())) return 'N/A';\n const p = (x) => String(x).padStart(2, '0');\n return d.getUTCFullYear() + '-' + p(d.getUTCMonth() + 1) + '-' + p(d.getUTCDate()) + ' ' + p(d.getUTCHours()) + ':' + p(d.getUTCMinutes()) + ':' + p(d.getUTCSeconds()) + ' UTC';\n}\n\nfunction toSortedEntries(obj) {\n if (!obj || typeof obj !== 'object' || Array.isArray(obj)) return [];\n return Object.keys(obj).sort((a, b) => String(a).localeCompare(String(b))).map((k) => [k, obj[k]]);\n}\n\nfunction buildPayload(resp) {\n const groups = Array.isArray(resp && resp.groups) ? resp.groups : [];\n const rows = [];\n let modemCount = 0;\n let successCount = 0;\n let failureCount = 0;\n\n const vendorCounts = Object.create(null);\n const modelCounts = Object.create(null);\n\n for (let i = 0; i < groups.length; i += 1) {\n const g = groups[i] || {};\n const sgId = g.service_group_id != null ? String(g.service_group_id) : 'N/A';\n modemCount += Number.isFinite(Number(g.modem_count)) ? Number(g.modem_count) : 0;\n successCount += Number.isFinite(Number(g.success_count)) ? Number(g.success_count) : 0;\n failureCount += Number.isFinite(Number(g.failure_count)) ? Number(g.failure_count) : 0;\n\n const modems = g.modems && typeof g.modems === 'object' ? g.modems : {};\n const entries = toSortedEntries(modems);\n for (let j = 0; j < entries.length; j += 1) {\n const mac = entries[j][0];\n const modemObj = entries[j][1] || {};\n const sys = modemObj && modemObj.sysdescr && typeof modemObj.sysdescr === 'object' ? modemObj.sysdescr : {};\n\n const vendor = safeText(sys.VENDOR);\n const model = safeText(sys.MODEL);\n\n if (vendor !== 'N/A') vendorCounts[vendor] = (vendorCounts[vendor] || 0) + 1;\n if (model !== 'N/A') modelCounts[model] = (modelCounts[model] || 0) + 1;\n\n rows.push({\n serviceGroupId: sgId,\n macAddress: sanitizeMac(mac),\n model: model,\n vendor: vendor,\n swVersion: safeText(sys.SW_REV),\n hwVersion: safeText(sys.HW_REV),\n bootRom: safeText(sys.BOOTR),\n sysDescrStatus: sys && sys.is_empty === false ? 'Available' : 'Empty'\n });\n }\n }\n\n rows.sort((a, b) => {\n const sgCmp = String(a.serviceGroupId).localeCompare(String(b.serviceGroupId), undefined, { numeric: true });\n if (sgCmp !== 0) return sgCmp;\n return String(a.macAddress).localeCompare(String(b.macAddress));\n });\n\n const serviceGroupBuckets = Object.create(null);\n for (let i = 0; i < rows.length; i += 1) {\n const row = rows[i];\n const sgId = row.serviceGroupId || 'N/A';\n if (!serviceGroupBuckets[sgId]) {\n serviceGroupBuckets[sgId] = { serviceGroupId: sgId, rows: [] };\n }\n serviceGroupBuckets[sgId].rows.push(row);\n }\n const serviceGroups = Object.keys(serviceGroupBuckets)\n .sort((a, b) => String(a).localeCompare(String(b), undefined, { numeric: true }))\n .map((key) => serviceGroupBuckets[key]);\n\n function toTopList(countMap) {\n return Object.keys(countMap)\n .sort((a, b) => countMap[b] - countMap[a] || a.localeCompare(b))\n .slice(0, 8)\n .map((name) => ({ name, count: countMap[name] }));\n }\n\n return {\n title: 'Serving Group Cable Modem getSysDescr',\n message: safeText(resp && resp.message),\n status: Number(resp && resp.status),\n statusText: Number(resp && resp.status) === 0 ? 'Success' : 'Error',\n pollType: safeText((resp && (resp.poll_type || resp.pollType || (resp.poll && resp.poll.type) || resp.request_type)), 'N/A'),\n captureTime: fmtUtc(resp && resp.timestamp),\n groupCount: groups.length,\n modemCount: modemCount,\n successCount: successCount,\n failureCount: failureCount,\n topVendors: toTopList(vendorCounts),\n topModels: toTopList(modelCounts),\n hasRows: rows.length > 0,\n serviceGroups: serviceGroups,\n rows: rows\n };\n}\n\nconst payload = buildPayload(response);\n\nconst template = `\n<style>\n :root {\n color-scheme: light dark;\n --bg: #141821;\n --panel: #1b2332;\n --panel2: #182234;\n --line: rgba(255,255,255,0.10);\n --text: #e7edf8;\n --muted: #b8c8e8;\n --accent: #9ec0ff;\n --ok: #39c28e;\n --warn: #f4c84b;\n --nok: #ff7a7a;\n }\n @media (prefers-color-scheme: light) {\n :root {\n --bg: #f4f7fc;\n --panel: #ffffff;\n --panel2: #f7f9fd;\n --line: #d9e1ef;\n --text: #0f172a;\n --muted: #475569;\n --accent: #2563eb;\n --ok: #15803d;\n --warn: #b45309;\n --nok: #dc2626;\n }\n }\n * { box-sizing: border-box; }\n body {\n margin: 0;\n padding: 16px;\n background: var(--bg);\n color: var(--text);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n }\n .wrap { max-width: 1700px; margin: 0 auto; display: grid; gap: 12px; }\n .header-row {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n align-items: center;\n gap: 8px;\n }\n .title {\n grid-column: 2;\n margin: 0;\n text-align: center;\n font-size: 22px;\n font-weight: 700;\n color: var(--text);\n }\n .capture-time {\n justify-self: end;\n font-size: 12px;\n color: var(--text);\n background: var(--panel2);\n border: 1px solid var(--line);\n border-radius: 999px;\n padding: 6px 10px;\n white-space: nowrap;\n }\n .panel {\n background: var(--panel);\n border: 1px solid var(--line);\n border-radius: 10px;\n padding: 12px;\n }\n .panel-title {\n margin: 0 0 8px;\n text-align: center;\n color: var(--accent);\n font-size: 16px;\n font-weight: 700;\n }\n .meta {\n margin: 0;\n text-align: center;\n color: var(--muted);\n font-size: 12px;\n }\n .kpis {\n display: grid;\n gap: 10px;\n grid-template-columns: repeat(7, minmax(0, 1fr));\n }\n @media (max-width: 1200px) {\n .kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n }\n @media (max-width: 760px) {\n .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n }\n .kpi {\n background: var(--panel2);\n border: 1px solid var(--line);\n border-radius: 8px;\n padding: 10px;\n }\n .kpi .label { font-size: 12px; color: var(--muted); }\n .kpi .value { margin-top: 4px; font-weight: 700; font-size: 16px; color: var(--text); }\n .value.ok { color: var(--ok); }\n .value.warn { color: var(--warn); }\n .value.nok { color: var(--nok); }\n .split {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n @media (max-width: 1000px) {\n .split { grid-template-columns: 1fr; }\n }\n .mini-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n }\n .mini-table th,\n .mini-table td {\n border: 1px solid var(--line);\n padding: 6px 8px;\n text-align: left;\n }\n .mini-table th { background: var(--panel2); color: var(--text); }\n .mini-table td { background: var(--panel); color: var(--text); }\n .table-wrap { overflow-x: auto; }\n .sg-title {\n margin: 10px 0 6px;\n color: var(--accent);\n font-size: 14px;\n font-weight: 700;\n text-align: left;\n }\n .device-table {\n width: 100%;\n border-collapse: collapse;\n min-width: 1150px;\n font-size: 12px;\n }\n .device-table th,\n .device-table td {\n border: 1px solid var(--line);\n padding: 7px 8px;\n text-align: left;\n vertical-align: top;\n white-space: nowrap;\n }\n .device-table th { background: var(--panel2); color: var(--text); }\n .device-table td { background: var(--panel); color: var(--text); }\n .mono { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }\n .empty {\n text-align: center;\n color: var(--muted);\n font-size: 14px;\n padding: 14px;\n border: 1px dashed var(--line);\n border-radius: 8px;\n background: var(--panel2);\n }\n</style>\n\n<div class=\"wrap\">\n <div class=\"header-row\">\n <div></div>\n <h1 class=\"title\">{{title}}</h1>\n <div class=\"capture-time\">Capture Time: {{captureTime}}</div>\n </div>\n\n <div class=\"panel\">\n <div class=\"panel-title\">Summary</div>\n <p class=\"meta\">Status: <strong>{{statusText}}</strong> · Message: {{message}}</p>\n <div class=\"kpis\">\n <div class=\"kpi\"><div class=\"label\">Serving Groups</div><div class=\"value\">{{groupCount}}</div></div>\n <div class=\"kpi\"><div class=\"label\">Modems</div><div class=\"value\">{{modemCount}}</div></div>\n <div class=\"kpi\"><div class=\"label\">Success Count</div><div class=\"value ok\">{{successCount}}</div></div>\n <div class=\"kpi\"><div class=\"label\">Failure Count</div><div class=\"value nok\">{{failureCount}}</div></div>\n <div class=\"kpi\"><div class=\"label\">PollType</div><div class=\"value\">{{pollType}}</div></div>\n </div>\n </div>\n\n <div class=\"split\">\n <div class=\"panel\">\n <div class=\"panel-title\">Top Vendors</div>\n <table class=\"mini-table\">\n <thead><tr><th>Vendor</th><th>Count</th></tr></thead>\n <tbody>\n {{#if topVendors.length}}\n {{#each topVendors}}<tr><td>{{name}}</td><td>{{count}}</td></tr>{{/each}}\n {{else}}\n <tr><td colspan=\"2\">N/A</td></tr>\n {{/if}}\n </tbody>\n </table>\n </div>\n\n <div class=\"panel\">\n <div class=\"panel-title\">Top Models</div>\n <table class=\"mini-table\">\n <thead><tr><th>Model</th><th>Count</th></tr></thead>\n <tbody>\n {{#if topModels.length}}\n {{#each topModels}}<tr><td>{{name}}</td><td>{{count}}</td></tr>{{/each}}\n {{else}}\n <tr><td colspan=\"2\">N/A</td></tr>\n {{/if}}\n </tbody>\n </table>\n </div>\n </div>\n\n <div class=\"panel\">\n <div class=\"panel-title\">Device Info</div>\n {{#if hasRows}}\n {{#each serviceGroups}}\n <h3 class=\"sg-title\">Service Group {{serviceGroupId}}</h3>\n <div class=\"table-wrap\">\n <table class=\"device-table\">\n <thead>\n <tr>\n <th>MacAddress</th>\n <th>Model</th>\n <th>Vendor</th>\n <th>SW Version</th>\n <th>HW Version</th>\n <th>Boot ROM</th>\n </tr>\n </thead>\n <tbody>\n {{#each rows}}\n <tr>\n <td class=\"mono\">{{macAddress}}</td>\n <td>{{model}}</td>\n <td>{{vendor}}</td>\n <td class=\"mono\">{{swVersion}}</td>\n <td class=\"mono\">{{hwVersion}}</td>\n <td class=\"mono\">{{bootRom}}</td>\n </tr>\n {{/each}}\n </tbody>\n </table>\n </div>\n {{/each}}\n {{else}}\n <div class=\"empty\">No modem sysDescr data found.</div>\n {{/if}}\n </div>\n</div>\n`;\n\npayload.isOk = Number(payload.status) === 0;\npm.visualizer.set(template, payload);\n"; |
48 | 48 | const app = document.getElementById("app"); |
49 | 49 | let visualizerData = sampleData; |
|
0 commit comments