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.
 
 
 
 
 

95 lines
2.1 KiB

/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*
* Originally from:
* https://github.com/zhukov/webogram
* Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>
* https://github.com/zhukov/webogram/blob/master/LICENSE
*/
import LatinizeMap from '../config/latinizeMap';
export const badCharsRe = /[`~!@#$%^&*()\-_=+\[\]\\|{}'";:\/?.>,<]+/g;
const trimRe = /^\s+|\s$/g;
const C2L: {[k: string]: string} = {
'й': 'q',
'ц': 'w',
'у': 'e',
'к': 'r',
'е': 't',
'н': 'y',
'г': 'u',
'ш': 'i',
'щ': 'o',
'з': 'p',
'х': '[',
'ъ': ']',
'ф': 'a',
'ы': 's',
'в': 'd',
'а': 'f',
'п': 'g',
'р': 'h',
'о': 'j',
'л': 'k',
'д': 'l',
'ж': ';',
'э': '\'',
'я': 'z',
'ч': 'x',
'с': 'c',
'м': 'v',
'и': 'b',
'т': 'n',
'ь': 'm',
'б': ',',
'ю': '.',
'.': '/'
};
export function clearBadCharsAndTrim(text: string) {
return text.replace(badCharsRe, '').replace(trimRe, '');
}
export function fixCyrillic(text: string) {
return text.toLowerCase().replace(/[\wа-я]/g, (ch) => {
const latinizeCh = C2L[ch];
return latinizeCh ?? ch;
});
}
export function latinizeString(text: string) {
return text.replace(/[^A-Za-z0-9]/g, (ch) => {
const latinizeCh = LatinizeMap[ch];
return latinizeCh ?? ch;
});
}
export default function cleanSearchText(text: string, latinize = true) {
return processSearchText(text, {
clearBadChars: true,
latinize,
ignoreCase: true
});
}
export type ProcessSearchTextOptions = Partial<{
clearBadChars: boolean,
latinize: boolean,
ignoreCase: boolean,
includeTag: boolean
}>;
export function processSearchText(text: string, options: ProcessSearchTextOptions = {}) {
const hasTag = options.includeTag && text.charAt(0) === '%';
const originalText = text;
if(options.clearBadChars) text = clearBadCharsAndTrim(text);
if(options.latinize) text = latinizeString(text);
if(options.ignoreCase) text = text.toLowerCase();
if(hasTag) text = '%' + text;
if(options.latinize) text += '\x01' + fixCyrillic(originalText);
return text;
}