fix(flags): label Tor country flag

This commit is contained in:
Tommaso Casaburi
2026-06-04 17:18:35 +07:00
parent 54f2cf2b84
commit 0f6d74592e
38 changed files with 108 additions and 52 deletions
+11 -1
View File
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest';
import { getCommentFlagFlairs, getAuthorFlagFlairs, getAuthorFlagViewModels } from '../comment-flags';
import { getCommentFlagFlairs, getAuthorFlagFlairs, getAuthorFlagViewModels, TOR_AUTHOR_FLAG_LABEL_KEY } from '../comment-flags';
describe('comment-flags', () => {
it('parses the pkc-js challenge flair example for country flags', () => {
@@ -25,6 +25,16 @@ describe('comment-flags', () => {
expect(flags[2]).toMatchObject({ label: 'Applejack', x: 80, y: 0 });
});
it('labels the xx country flag as Tor traffic', () => {
const [flag] = getAuthorFlagViewModels([{ text: 'flag:country:xx' }], 1000);
expect(flag).toMatchObject({
key: 'country:xx',
label: 'This user is on Tor',
labelKey: TOR_AUTHOR_FLAG_LABEL_KEY,
});
});
it('normalizes text flag kinds before parsing', () => {
const flags = getAuthorFlagViewModels([{ text: 'FLAG:COUNTRY:DE' }, { text: 'POL:AC' }, { text: 'flag:MLP:AJ' }], 1000);
+6 -1
View File
@@ -2,6 +2,9 @@ import { COUNTRY_FLAG_HEIGHT, COUNTRY_FLAG_WIDTH, getCountryFlagPosition, getCou
import { getBoardFlagDefinition, normalizeBoardFlagKind, type BoardFlagKind } from './board-flags';
const COUNTRY_FLAG_SPRITE_PATH = 'assets/icons/flags-1.png';
const TOR_COUNTRY_CODE = 'xx';
const TOR_AUTHOR_FLAG_LABEL = 'This user is on Tor';
export const TOR_AUTHOR_FLAG_LABEL_KEY = 'tor_author_flag_label';
const FLAG_TEXT_PATTERN = /^flag:([a-z-]+):([a-z0-9-]+)$/i;
const SHORT_FLAG_TEXT_PATTERN = /^(country|geo|pol|political|meme|memeflag|memeflags|pony|mlp):([a-z0-9-]+)$/i;
const COUNTRY_EMOJI_TEXT_PATTERN = /^([a-z]{2}|catalonia|eu|fam|xe|xs|xw|xk|xx)-emoji$/i;
@@ -46,6 +49,7 @@ export interface AuthorFlagViewModel {
type: 'country' | BoardFlagKind;
code: string;
label: string;
labelKey?: string;
spritePath: string;
width: number;
height: number;
@@ -161,7 +165,8 @@ const toCountryFlagViewModel = (codeValue: string): AuthorFlagViewModel | undefi
key: `country:${code}`,
type: 'country',
code,
label: getCountryLabel(code) ?? code.toUpperCase(),
label: code === TOR_COUNTRY_CODE ? TOR_AUTHOR_FLAG_LABEL : (getCountryLabel(code) ?? code.toUpperCase()),
...(code === TOR_COUNTRY_CODE ? { labelKey: TOR_AUTHOR_FLAG_LABEL_KEY } : {}),
spritePath: COUNTRY_FLAG_SPRITE_PATH,
width: COUNTRY_FLAG_WIDTH,
height: COUNTRY_FLAG_HEIGHT,