(config)
| 12953 | <div class="flex flex-wrap gap-1 mb-1">${_pwnBadgesHTML(net)}</div> |
| 12954 | <div class="text-xs mt-1">${_pwnGpsHTML(net)}</div> |
| 12955 | ${_pwnFilesHTML(net.files)} |
| 12956 | </div>`; |
| 12957 | } |
| 12958 | |
| 12959 | /* --- Desktop table row (shown >= md) --- */ |
| 12960 | function networkRowHTML(net) { |
| 12961 | const ssid = escapeHtml(net.ssid || 'Unknown'); |
| 12962 | const bssid = escapeHtml(net.bssid || 'Unknown'); |
| 12963 | const lastSeen = net.last_seen ? formatTimestamp(net.last_seen) : 'Unknown'; |
| 12964 | return ` |
| 12965 | <tr class="hover:bg-gray-700 transition-colors"> |
| 12966 | <td class="px-4 py-3 text-sm text-white font-semibold">${ssid}</td> |
| 12967 | <td class="px-4 py-3 text-sm text-gray-300 font-mono">${bssid}</td> |
| 12968 | <td class="px-4 py-3 text-sm">${_pwnBadgesHTML(net)}</td> |
| 12969 | <td class="px-4 py-3 text-sm">${_pwnGpsHTML(net)}</td> |
| 12970 | <td class="px-4 py-3 text-sm text-gray-400 whitespace-nowrap">${lastSeen}</td> |
| 12971 | <td class="px-4 py-3 text-sm">${_pwnFilesHTML(net.files)}</td> |
| 12972 | </tr>`; |
| 12973 | } |
| 12974 | |
| 12975 | /* --- Build mobile cards --- */ |
| 12976 | let mobileHTML = '<div class="md:hidden space-y-3">'; |
| 12977 | previewItems.forEach(net => { mobileHTML += networkCardHTML(net); }); |
| 12978 | if (hasMore) { |
| 12979 | mobileHTML += ` |
| 12980 | <button onclick="togglePwnNetworksExpansion()" |
| 12981 | class="flex items-center justify-center w-full py-3 px-4 bg-gray-700 hover:bg-gray-600 rounded-lg transition-colors text-gray-300 hover:text-white"> |
| 12982 | <span id="pwn-networks-expand-text-m">Show ${hiddenItems.length} more</span> |
| 12983 | <svg id="pwn-networks-expand-arrow-m" class="w-4 h-4 ml-2 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24"> |
| 12984 | <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path> |
| 12985 | </svg> |
| 12986 | </button> |
| 12987 | <div id="pwn-networks-hidden-m" class="hidden space-y-3">`; |
| 12988 | hiddenItems.forEach(net => { mobileHTML += networkCardHTML(net); }); |
| 12989 | mobileHTML += '</div>'; |
| 12990 | } |
| 12991 | mobileHTML += '</div>'; |
no test coverage detected