-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfake-names.js
More file actions
131 lines (123 loc) · 6.54 KB
/
fake-names.js
File metadata and controls
131 lines (123 loc) · 6.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Deterministic playful fake-name generator, localised by UI language.
// Same conversation id always maps to the same name within a given locale
// (different across locales — switching browser language regenerates them).
const DICTIONARIES = {
zh_CN: {
SEP: '',
ADJ: [
'毛茸茸的', '会跳舞的', '爱睡觉的', '害羞的', '神秘的', '焦虑的',
'醉醺醺的', '暴躁的', '优雅的', '笨笨的', '偷东西的', '哲学的',
'失眠的', '摸鱼的', '装睡的', '加班的', '退休的', '上岸的',
'拖延的', '摆烂的', '内卷的', '续杯的', '嘴硬的', '撒娇的',
'一本正经的', '戏精的', '反卷的', '不想上班的', '永远迟到的', '闷骚的',
'假装很忙的', '半夜emo的', '假笑的', '重启中的', '缺氧的', '装死的',
'吃饱了的', '上头的', '迷路的', '断网的',
],
NOUN: [
'水豚', '章鱼', '柯基', '仓鼠', '海獭', '红薯',
'玉米', '馒头', '麻薯', '抹茶', '布丁', '北极熊',
'海豹', '兔子', '鸭子', '小熊猫', '树懒', '狐狸',
'刺猬', '螃蟹', '河豚', '鹅', '鹦鹉', '蜗牛',
'青蛙', '鲸鱼', '海星', '寿司', '拉面', '番茄',
'黄瓜', '西瓜', '葡萄', '芒果', '椰子', '奶茶',
'咖啡豆', '程序员', '社畜', '打工人',
],
},
en: {
SEP: ' ',
ADJ: [
'Anxious', 'Sleepy', 'Grumpy', 'Sneaky', 'Curious', 'Fluffy',
'Salty', 'Sassy', 'Bouncy', 'Cranky', 'Dizzy', 'Drowsy',
'Cheeky', 'Sparkly', 'Wobbly', 'Mopey', 'Snarky', 'Sulky',
'Bashful', 'Clumsy', 'Giggly', 'Jumpy', 'Twitchy', 'Cozy',
'Yawning', 'Lazy', 'Sticky', 'Squishy', 'Sneezy', 'Pouting',
'Snoring', 'Grouchy', 'Whimsical', 'Stoic', 'Procrastinating',
'Overthinking', 'Daydreaming', 'Caffeinated', 'Burnt-out', 'Underpaid',
],
NOUN: [
'Capybara', 'Octopus', 'Hamster', 'Otter', 'Penguin', 'Quokka',
'Sloth', 'Axolotl', 'Walrus', 'Manatee', 'Llama', 'Alpaca',
'Beaver', 'Wombat', 'Pangolin', 'Hedgehog', 'Squirrel', 'Bunny',
'Duckling', 'Puffin', 'Narwhal', 'Seal', 'Raccoon', 'Toad',
'Crab', 'Mushroom', 'Dumpling', 'Bagel', 'Toast', 'Pickle',
'Donut', 'Cupcake', 'Sandwich', 'Marshmallow', 'Noodle', 'Sushi',
'Pretzel', 'Croissant', 'Intern', 'Goblin',
],
},
ja: {
SEP: '',
ADJ: [
'眠そうな', 'ふわふわの', 'ぐうたらな', 'おしゃべりな', 'やる気のない', '怒りっぽい',
'上機嫌な', '不機嫌な', '恥ずかしがりの', '内気な', '心配性な', '元気な',
'さみしがりの', 'おなかすいた', '残業中の', '副業中の', '厨二病の', 'やる気満々の',
'めんどくさがりの', '引きこもりの', '怠け者の', '寝坊した', '二度寝した', 'ゲーム中の',
'スマホ依存の', '漫画読みの', 'アイスを食べる', 'ラーメンを待つ', '散歩する', '寝言を言う',
'鼻歌の', '哲学する', 'モフモフの', 'ぼーっとした', 'おっちょこちょいな', '妄想中の',
'残業終わりの', 'ダッシュする', '素直な', '迷子の',
],
NOUN: [
'カピバラ', 'タコ', 'アザラシ', 'アライグマ', 'レッサーパンダ', 'ハリネズミ',
'ペンギン', 'クマ', 'ウサギ', 'リス', 'アヒル', 'シマエナガ',
'クラゲ', 'ナマケモノ', 'パンダ', 'シマウマ', 'トナカイ', 'セイウチ',
'ラッコ', 'シャチ', 'おにぎり', 'たい焼き', 'アンパン', 'からあげ',
'抹茶', 'プリン', 'ラーメン', 'ケーキ', 'パンケーキ', 'モチ',
'シュークリーム', 'バナナ', 'リンゴ', 'スイカ', 'トマト', 'きゅうり',
'ねぎ', 'さば', '社畜', 'プログラマー',
],
},
hi: {
SEP: ' ',
ADJ: [
'आलसी', 'नींद वाला', 'मासूम', 'शरारती', 'घबराया', 'ख़ुश',
'उदास', 'छोटा', 'प्यारा', 'डरा', 'थका', 'भूखा',
'तेज़', 'धीमा', 'चालाक', 'बहादुर', 'मीठा', 'तीखा',
'ठंडा', 'गरम', 'गोल', 'मस्त', 'उछलता', 'नाचता',
'गाता', 'सोता', 'हँसता', 'रोता', 'खाता', 'पीता',
'भागता', 'उड़ता', 'तैरता', 'छुपता', 'घूमता', 'चढ़ता',
'गिरता', 'जलता', 'चमकता', 'झूमता',
],
NOUN: [
'कपिबारा', 'बिल्ली', 'कुत्ता', 'गिलहरी', 'खरगोश', 'हाथी',
'उल्लू', 'बंदर', 'पांडा', 'लोमड़ी', 'भेड़िया', 'शेर',
'बाघ', 'ज़ेबरा', 'जिराफ़', 'घोड़ा', 'गाय', 'बकरी',
'मुर्गी', 'बत्तख़', 'कौआ', 'तोता', 'मछली', 'केकड़ा',
'समोसा', 'लड्डू', 'जलेबी', 'चाय', 'दाल', 'रोटी',
'पनीर', 'आम', 'केला', 'सेब', 'संतरा', 'अनार',
'गुलाब', 'चमेली', 'प्रोग्रामर', 'मेहमान',
],
},
};
function pickDict() {
// Prefer the locale resolved by i18n.js (which honours the popup
// override). Fall back to browser UI language if i18n.js hasn't loaded.
let key = 'en';
if (window.__veilbar && window.__veilbar.locale) {
key = window.__veilbar.locale();
} else if (chrome.i18n && chrome.i18n.getUILanguage) {
const ui = chrome.i18n.getUILanguage().toLowerCase();
if (ui.startsWith('zh')) key = 'zh_CN';
else if (ui.startsWith('ja')) key = 'ja';
else if (ui.startsWith('hi')) key = 'hi';
}
return DICTIONARIES[key] || DICTIONARIES.en;
}
function hashStr(s) {
let h = 2166136261;
for (let i = 0; i < s.length; i++) {
h ^= s.charCodeAt(i);
h = (h * 16777619) >>> 0;
}
return h;
}
function fakeName(id) {
// Look up the dictionary on every call — when the user switches
// language from the popup, the very next applyTo cycle will emit
// names from the new locale without needing a page reload.
const dict = pickDict();
const { ADJ, NOUN, SEP } = dict;
const h = hashStr(id || '');
const adj = ADJ[h % ADJ.length];
const noun = NOUN[Math.floor(h / ADJ.length) % NOUN.length];
return adj + SEP + noun;
}
window.__cgptFakeName = fakeName;