feat: status bar added
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
// Maps ADIF DXCC entity numbers to ISO-3166 alpha-2 codes (flagcdn slugs),
|
||||
// so we can show the contacted entity's flag in the UI.
|
||||
//
|
||||
// Why not emoji flags? Windows does NOT render regional-indicator flag
|
||||
// emoji (it shows the two letters instead), and this is a Windows app — so
|
||||
// we use flagcdn.com PNGs keyed by ISO code instead.
|
||||
//
|
||||
// Numbers are taken verbatim from internal/dxcc/adif_numbers.go so they're
|
||||
// guaranteed correct. Coverage is the commonly-worked entities; an unknown
|
||||
// DXCC number simply yields no flag (graceful — better than a wrong one).
|
||||
//
|
||||
// French overseas territories (Corsica, Guadeloupe, Martinique, Réunion,
|
||||
// New Caledonia, French Polynesia…) are mapped to "fr": they fly the French
|
||||
// tricolore and several of their ISO codes aren't served by flagcdn.
|
||||
const DXCC_ISO: Record<number, string> = {
|
||||
// North America
|
||||
1: 'ca', 291: 'us', 6: 'us', 110: 'us', 50: 'mx',
|
||||
202: 'pr', 285: 'vi', 91: 'vg', 69: 'ky', 82: 'jm', 60: 'bs', 64: 'bm',
|
||||
78: 'ht', 72: 'do', 70: 'cu', 62: 'bb', 90: 'tt', 77: 'gd', 97: 'lc',
|
||||
98: 'vc', 95: 'dm', 96: 'ms', 249: 'kn', 94: 'ag', 89: 'tc',
|
||||
79: 'fr', 84: 'fr', 63: 'fr',
|
||||
// Central America
|
||||
66: 'bz', 80: 'hn', 74: 'sv', 86: 'ni', 308: 'cr', 88: 'pa', 76: 'gt',
|
||||
// South America
|
||||
116: 'co', 120: 'ec', 71: 'ec', 136: 'pe', 104: 'bo', 112: 'cl',
|
||||
100: 'ar', 144: 'uy', 132: 'py', 108: 'br', 148: 've', 129: 'gy',
|
||||
140: 'sr', 216: 'co',
|
||||
// Western Europe
|
||||
227: 'fr', 214: 'fr', 230: 'de', 209: 'be', 263: 'nl', 254: 'lu',
|
||||
287: 'ch', 251: 'li', 206: 'at', 248: 'it', 225: 'it', 281: 'es',
|
||||
272: 'pt', 203: 'ad', 278: 'sm', 295: 'va', 260: 'mc',
|
||||
// British Isles
|
||||
223: 'gb-eng', 279: 'gb-sct', 294: 'gb-wls', 265: 'gb-nir', 245: 'ie',
|
||||
114: 'im', 122: 'je', 106: 'gg',
|
||||
// Central / Eastern Europe
|
||||
269: 'pl', 503: 'cz', 504: 'sk', 239: 'hu', 275: 'ro', 212: 'bg',
|
||||
296: 'rs', 514: 'me', 499: 'si', 497: 'hr', 501: 'ba', 502: 'mk',
|
||||
522: 'xk', 7: 'al',
|
||||
// Greece / Mediterranean
|
||||
236: 'gr', 45: 'gr', 40: 'gr', 180: 'gr', 215: 'cy', 257: 'mt', 390: 'tr',
|
||||
// Nordic / Baltic
|
||||
221: 'dk', 222: 'fo', 237: 'gl', 284: 'se', 266: 'no', 224: 'fi',
|
||||
5: 'ax', 242: 'is', 52: 'ee', 145: 'lv', 146: 'lt',
|
||||
// Eastern Europe / Caucasus / Russia
|
||||
27: 'by', 288: 'ua', 179: 'md', 75: 'ge', 14: 'am', 18: 'az',
|
||||
54: 'ru', 15: 'ru', 126: 'ru',
|
||||
// Middle East
|
||||
336: 'il', 342: 'jo', 354: 'lb', 384: 'sy', 378: 'sa', 391: 'ae',
|
||||
304: 'bh', 348: 'kw', 376: 'qa', 370: 'om', 492: 'ye', 330: 'ir', 333: 'iq',
|
||||
// North Africa
|
||||
478: 'eg', 436: 'ly', 400: 'dz', 446: 'ma', 302: 'eh', 474: 'tn',
|
||||
// Sub-Saharan Africa
|
||||
462: 'za', 464: 'na', 402: 'bw', 452: 'zw', 482: 'zm', 181: 'mz',
|
||||
438: 'mg', 165: 'mu', 453: 'fr', 379: 'sc', 430: 'ke', 470: 'tz',
|
||||
286: 'ug', 53: 'et', 51: 'er', 466: 'sd', 521: 'ss', 450: 'ng',
|
||||
424: 'gh', 406: 'cm', 456: 'sn', 434: 'lr', 458: 'sl', 416: 'bj',
|
||||
483: 'tg', 428: 'ci', 442: 'ml', 187: 'ne', 410: 'td', 32: 'cv',
|
||||
420: 'ga', 444: 'mr', 382: 'dj', 454: 'rw', 107: 'gn', 39: 'km', 169: 'fr',
|
||||
// Asia
|
||||
339: 'jp', 137: 'kr', 344: 'kp', 318: 'cn', 324: 'in', 372: 'pk',
|
||||
315: 'lk', 369: 'np', 305: 'bd', 306: 'bt', 309: 'mm', 299: 'my',
|
||||
46: 'my', 381: 'sg', 327: 'id', 375: 'ph', 345: 'bn', 312: 'kh',
|
||||
143: 'la', 387: 'th', 293: 'vn', 130: 'kz', 292: 'uz', 280: 'tm',
|
||||
262: 'tj', 135: 'kg', 3: 'af', 159: 'mv', 363: 'mn', 321: 'hk',
|
||||
386: 'tw', 511: 'tl',
|
||||
// Oceania
|
||||
150: 'au', 163: 'pg', 185: 'sb', 158: 'vu', 176: 'fj', 190: 'ws',
|
||||
170: 'nz', 162: 'fr', 175: 'fr', 160: 'to', 282: 'tv', 301: 'ki',
|
||||
188: 'nu', 168: 'mh', 189: 'nf', 147: 'au',
|
||||
};
|
||||
|
||||
// flagURL returns a flagcdn PNG URL for the given DXCC entity number, or ''
|
||||
// when we don't have a mapping. Height ~20px by default (retina-friendly).
|
||||
export function flagURL(dxcc?: number): string {
|
||||
if (!dxcc) return '';
|
||||
const iso = DXCC_ISO[dxcc];
|
||||
return iso ? `https://flagcdn.com/h20/${iso}.png` : '';
|
||||
}
|
||||
Reference in New Issue
Block a user