Telegram Web K with changes to work inside I2P
https://web.telegram.i2p/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.4 KiB
77 lines
2.4 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
*/ |
|
|
|
import type addAnchorListener from '../../helpers/addAnchorListener'; |
|
import {PHONE_NUMBER_REG_EXP} from '.'; |
|
import {MOUNT_CLASS_TO} from '../../config/debug'; |
|
import matchUrlProtocol from './matchUrlProtocol'; |
|
import {T_ME_PREFIXES} from '../mtproto/mtproto_config'; |
|
|
|
export default function wrapUrl(url: string, unsafe?: number | boolean) { |
|
if(!matchUrlProtocol(url)) { |
|
url = 'https://' + url; |
|
} |
|
|
|
const out: {url: string, onclick?: Parameters<typeof addAnchorListener>[0]['name']} = {url}; |
|
let tgMeMatch, telescoPeMatch, tgMatch; |
|
let onclick: typeof out['onclick']; |
|
/* if(unsafe === 2) { |
|
url = 'tg://unsafe_url?url=' + encodeURIComponent(url); |
|
} else */if((tgMeMatch = url.match(/^(?:https?:\/\/)?(?:(.+?)\.)?(?:(?:web|k|z|a)\.)?t(?:elegram)?\.me(?:\/(.+))?/))) { |
|
const u = new URL(url); |
|
let prefix = tgMeMatch[1]; |
|
if(prefix && T_ME_PREFIXES.has(tgMeMatch[1])) { |
|
prefix = undefined; |
|
} |
|
|
|
if(prefix) { |
|
u.pathname = prefix + (u.pathname === '/' ? '' : u.pathname); |
|
} |
|
|
|
const fullPath = u.pathname.slice(1); |
|
const path = fullPath.split('/'); |
|
|
|
if(path[0] && path[0][0] === '$' && path[0].length > 1) { |
|
onclick = 'invoice'; |
|
} else if(/^\+/.test(fullPath) && !PHONE_NUMBER_REG_EXP.test(fullPath)) { // second regexp is for phone numbers (t.me/+38050...) |
|
onclick = 'joinchat'; |
|
} else if(path[0]) switch(path[0]) { |
|
case 'addlist': |
|
case 'joinchat': |
|
case 'addstickers': |
|
case 'addemoji': |
|
case 'voicechat': |
|
case 'invoice': |
|
if(path.length !== 1 && !prefix) { |
|
onclick = path[0]; |
|
break; |
|
} |
|
|
|
default: |
|
if(path.length <= 2 || path[1]?.match(/^\d+(?:\?(?:comment|thread)=\d+)?$/)) { |
|
onclick = 'im'; |
|
break; |
|
} |
|
|
|
break; |
|
} |
|
} else if((telescoPeMatch = url.match(/^(?:https?:\/\/)?telesco\.pe\/([^/?]+)\/(\d+)/))) { |
|
onclick = 'im'; |
|
} else if((tgMatch = url.match(/tg:(?:\/\/)?(.+?)(?:\?|$)/))) { |
|
onclick = 'tg_' + tgMatch[1] as any; |
|
}/* else if(unsafe) { |
|
url = 'tg://unsafe_url?url=' + encodeURIComponent(url); |
|
} */ |
|
|
|
if(!(window as any)[onclick]) { |
|
onclick = undefined; |
|
} |
|
|
|
out.onclick = onclick; |
|
return out; |
|
} |
|
|
|
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.wrapUrl = wrapUrl);
|
|
|