TGViewer
Telegram github commits and releases Telegram github commits and releases @tgappsupdates · 4.47K subscribers
Post #20779 54
morethanwords/tweb/master • 16bf5ed • 6 files, +244/-74
Warn before opening a link that fakes a familiar domain

Auto-detected links were checked for a latin/non-latin mix only, so a
host built from two non-latin scripts opened without a word: `пօчта.рф`
is cyrillic with an armenian `օ` standing in for `о`. The same check
cried wolf on `例え.jp`, where the only latin in sight is the TLD.

Scripts are now resolved per label following UTS #39 — a label mixing
scripts is a spoof unless it is one of the japanese/korean/chinese
combinations, a letter from a script no registry sells is a spoof on its
own, and a cyrillic/greek/armenian label next to a latin one still is
one, which is what keeps `аррӏе.com` caught.

The check moved into safeWindowOpen as well, so the urls the app opens
without an anchor of its own — inline keyboard buttons, story links, web
app events — no longer skip it, and a host-shaped login such as
`почта.рф@evil.com` is now caught too. Hence the rename: it is no longer
only about scripts.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

morethanwords/tweb/master • b2df097 • 4 files, +54/-10
Recolor chat list spoilers when a row becomes active

The bluff spoiler a dialog preview draws over spoilered text picks its
particle color once, from `getComputedStyle(element).color`, and only
recomputes it on a resize, a theme change or a new chat background.
Opening a chat repaints the row's subtitle to white through CSS alone, so
the particles kept the grey of an inactive row — and stayed white once the
row lost the highlight.

The color is already known at that point: renderDialogSubtitleParts threads
`getTextColor(isActive)` into wrapRichText for the custom emoji sitting next
to the spoiler. Pass it down to the renderer too, resolve it through
customProperties, and recolor it from setDialogActiveStatus exactly where
`setTextColor` recolors those custom emoji. Sampling the computed color
stays as the fallback for callers with no property to name — a reply preview
inside a bubble takes its color from the peer, not from a fixed variable.

The color lives in a WeakMap rather than beside the update callback because
it has to outlive the render target: the element can be detached and
reconnected (BluffSpoilerController), and that re-attach must repaint with
the color the row has now, not with the one captured when it first rendered.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

#webk
  • 🫡 3
More from @tgappsupdates
  1. Oct 4, 2026TGX-Android/Telegram-X/main • 45c993f • 2 files, +57/-1 Do not show intro if default GL co…
  2. Oct 4, 2026TGX-Android/Telegram-X/main • 4d0a9f5 • 1 files, +1/-1 Update dependencies TGX-Android/Tel…
  3. Oct 4, 2026TGX-Android/Telegram-X/main • 603e4b5 • 68 files, +409/-309 Fix multidex crash on Android…
  4. Oct 4, 2026TGX-Android/Telegram-X/main • e966e04 • 68 files, +409/-309 Fix multidex crash on Android…
  5. Oct 4, 2026TGX-Android/Telegram-X/main • e126fbd • 1 files, +1/-1 Fix `isExampleBuild` value #tgxandr…
  6. Oct 4, 2026TGX-Android/Telegram-X/main • e4d5197 • 1 files, +2/-2 Pass invariant separators path to C…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →