Update content of files

This commit is contained in:
GitHub Action 2022-04-13 15:11:59 +00:00
parent adcefc5b5a
commit f378811848
7 changed files with 224 additions and 234 deletions

View file

@ -1,3 +1,4 @@
// WebView
(function () {
var eventHandlers = {};
@ -8,33 +9,6 @@
var initParams = urlParseHashParams(locationHash);
var webAppDataRaw = '', webAppData = {};
var themeParams = {}, colorScheme = 'light';
if (initParams.tgWebAppData && initParams.tgWebAppData.length) {
webAppDataRaw = initParams.tgWebAppData;
webAppData = urlParseHashParams(webAppDataRaw);
delete webAppData._path;
for (var key in webAppData) {
var val = webAppData[key];
try {
if (val.substr(0, 1) == '{' && val.substr(-1) == '}' ||
val.substr(0, 1) == '[' && val.substr(-1) == ']') {
webAppData[key] = JSON.parse(val);
}
} catch (e) {}
}
}
if (initParams.tgWebAppThemeParams && initParams.tgWebAppThemeParams.length) {
var themeParamsRaw = initParams.tgWebAppThemeParams;
try {
var theme_params = JSON.parse(themeParamsRaw);
setThemeParams(theme_params);
} catch (e) {}
} else if (webAppData.theme_params) { // legacy
setThemeParams(webAppData.theme_params);
}
var isIframe = false;
try {
isIframe = (window.parent != null && window != window.parent);
@ -54,32 +28,6 @@
}
} catch (e) {}
function onThemeChanged(eventType, eventData) {
if (eventData.theme_params) {
setThemeParams(eventData.theme_params);
window.Telegram.WebApp.MainButton.setParams({
force_update: true
});
receiveWebViewEvent('themeChanged');
}
}
var lastWindowHeight = window.innerHeight;
function onViewportChanged(eventType, eventData) {
if (eventData.height) {
window.removeEventListener('resize', onWindowResize);
setViewportHeight(eventData);
}
}
function onWindowResize(e) {
if (lastWindowHeight != window.innerHeight) {
lastWindowHeight = window.innerHeight;
receiveWebViewEvent('viewportChanged', {
isStateStable: true
});
}
}
function urlSafeDecode(urlencoded) {
try {
urlencoded = urlencoded.replace(/\+/g, '%20');
@ -105,10 +53,22 @@
params._path = urlSafeDecode(pathParam);
locationHash = locationHash.substr(qIndex + 1);
}
var locationHashParams = locationHash.split('&');
var query_params = urlParseQueryString(locationHash);
for (var k in query_params) {
params[k] = query_params[k];
}
return params;
}
function urlParseQueryString(queryString) {
var params = {};
if (!queryString.length) {
return params;
}
var queryStringParams = queryString.split('&');
var i, param, paramName, paramValue;
for (i = 0; i < locationHashParams.length; i++) {
param = locationHashParams[i].split('=');
for (i = 0; i < queryStringParams.length; i++) {
param = queryStringParams[i].split('=');
paramName = urlSafeDecode(param[0]);
paramValue = param[1] == null ? null : urlSafeDecode(param[1]);
params[paramName] = paramValue;
@ -218,20 +178,138 @@
eventHandlers[eventType].splice(index, 1);
};
function openProtoUrl(url) {
if (!url.match(/^(web\+)?tgb?:\/\/./)) {
return false;
}
var useIframe = navigator.userAgent.match(/iOS|iPhone OS|iPhone|iPod|iPad/i) ? true : false;
if (useIframe) {
var iframeContEl = document.getElementById('tgme_frame_cont') || document.body;
var iframeEl = document.createElement('iframe');
iframeContEl.appendChild(iframeEl);
var pageHidden = false;
var enableHidden = function () {
pageHidden = true;
};
window.addEventListener('pagehide', enableHidden, false);
window.addEventListener('blur', enableHidden, false);
if (iframeEl !== null) {
iframeEl.src = url;
}
setTimeout(function() {
if (!pageHidden) {
window.location = url;
}
window.removeEventListener('pagehide', enableHidden, false);
window.removeEventListener('blur', enableHidden, false);
}, 2000);
}
else {
window.location = url;
}
return true;
}
if (!window.Telegram) {
window.Telegram = {};
}
window.Telegram.WebView = {
initParams: initParams,
onEvent: onEvent,
offEvent: offEvent,
postEvent: postEvent,
receiveEvent: receiveEvent,
callEventCallbacks: callEventCallbacks
};
window.Telegram.Utils = {
urlSafeDecode: urlSafeDecode,
urlParseQueryString: urlParseQueryString,
urlParseHashParams: urlParseHashParams,
urlAppendHashParams: urlAppendHashParams
};
// For Windows Phone app
window.TelegramGameProxy_receiveEvent = receiveEvent;
// App backward compatibility
window.TelegramGameProxy = {
receiveEvent: receiveEvent
};
})();
// WebApp
(function () {
var Utils = window.Telegram.Utils;
var WebView = window.Telegram.WebView;
var initParams = WebView.initParams;
var WebApp = {};
var webAppInitData = '', webAppInitDataUnsafe = {};
var themeParams = {}, colorScheme = 'light';
if (initParams.tgWebAppData && initParams.tgWebAppData.length) {
webAppInitData = initParams.tgWebAppData;
webAppInitDataUnsafe = Utils.urlParseQueryString(webAppInitData);
for (var key in webAppInitDataUnsafe) {
var val = webAppInitDataUnsafe[key];
try {
if (val.substr(0, 1) == '{' && val.substr(-1) == '}' ||
val.substr(0, 1) == '[' && val.substr(-1) == ']') {
webAppInitDataUnsafe[key] = JSON.parse(val);
}
} catch (e) {}
}
}
if (initParams.tgWebAppThemeParams && initParams.tgWebAppThemeParams.length) {
var themeParamsRaw = initParams.tgWebAppThemeParams;
try {
var theme_params = JSON.parse(themeParamsRaw);
setThemeParams(theme_params);
} catch (e) {}
}
function onThemeChanged(eventType, eventData) {
if (eventData.theme_params) {
setThemeParams(eventData.theme_params);
window.Telegram.WebApp.MainButton.setParams({
force_update: true
});
receiveWebViewEvent('themeChanged');
}
}
var lastWindowHeight = window.innerHeight;
function onViewportChanged(eventType, eventData) {
if (eventData.height) {
window.removeEventListener('resize', onWindowResize);
setViewportHeight(eventData);
}
}
function onWindowResize(e) {
if (lastWindowHeight != window.innerHeight) {
lastWindowHeight = window.innerHeight;
receiveWebViewEvent('viewportChanged', {
isStateStable: true
});
}
}
function receiveWebViewEvent(eventType) {
var args = Array.prototype.slice.call(arguments);
eventType = args.shift();
callEventCallbacks('webview:' + eventType, function(callback) {
callback.apply(window.Telegram.WebApp, args);
WebView.callEventCallbacks('webview:' + eventType, function(callback) {
callback.apply(WebApp, args);
});
}
function onWebViewEvent(eventType, callback) {
onEvent('webview:' + eventType, callback);
WebView.onEvent('webview:' + eventType, callback);
};
function offWebViewEvent(eventType, callback) {
offEvent('webview:' + eventType, callback);
WebView.offEvent('webview:' + eventType, callback);
};
function setCssProperty(name, value) {
@ -322,17 +400,6 @@
return s;
}
function isParentEl(el, parentEl) {
var checkEl = el.parentNode;
while (checkEl) {
if (checkEl === parentEl) {
return true;
}
checkEl = checkEl.parentNode;
}
return false;
}
var mainButtonHeight = 0;
var MainButton = (function() {
var isVisible = false;
@ -373,7 +440,7 @@
enumerable: true
});
onEvent('main_button_pressed', onMainButtonPressed);
WebView.onEvent('main_button_pressed', onMainButtonPressed);
var debugBtn = null, debugBtnStyle = {};
if (initParams.tgWebAppDebug) {
@ -414,7 +481,7 @@
function updateButton() {
var color = mainButton.color;
var text_color = mainButton.textColor;
postEvent('web_app_setup_main_button', false, isVisible ? {
WebView.postEvent('web_app_setup_main_button', false, isVisible ? {
is_visible: true,
is_active: isActive,
is_progress_visible: isProgressVisible,
@ -560,84 +627,48 @@
return mainButton;
})();
function openProtoUrl(url) {
if (!url.match(/^(web\+)?tgb?:\/\/./)) {
return false;
}
var useIframe = navigator.userAgent.match(/iOS|iPhone OS|iPhone|iPod|iPad/i) ? true : false;
if (useIframe) {
var iframeContEl = document.getElementById('tgme_frame_cont') || document.body;
var iframeEl = document.createElement('iframe');
iframeContEl.appendChild(iframeEl);
var pageHidden = false;
var enableHidden = function () {
pageHidden = true;
};
window.addEventListener('pagehide', enableHidden, false);
window.addEventListener('blur', enableHidden, false);
if (iframeEl !== null) {
iframeEl.src = url;
}
setTimeout(function() {
if (!pageHidden) {
window.location = url;
}
window.removeEventListener('pagehide', enableHidden, false);
window.removeEventListener('blur', enableHidden, false);
}, 2000);
}
else {
window.location = url;
}
return true;
}
if (!window.Telegram) {
window.Telegram = {};
}
window.Telegram.WebView = {
initParams: initParams,
onEvent: onEvent,
offEvent: offEvent,
receiveEvent: receiveEvent,
};
window.Telegram.Games = {
shareScore: function() {
postEvent('share_score', function (error) {
if (error) {
var shareScoreUrl = initParams.tgShareScoreUrl;
if (shareScoreUrl) {
openProtoUrl(shareScoreUrl);
}
}
Object.defineProperty(WebApp, 'initData', {
get: function(){ return webAppInitData; },
enumerable: true
});
},
shareGame: function() {
postEvent('share_game');
}
};
window.Telegram.Payments = {
submitPaymentForm: function (formData) {
if (!formData ||
!formData.credentials ||
formData.credentials.type !== 'card' ||
!formData.credentials.token ||
!formData.credentials.token.match(/^[A-Za-z0-9\/=_\-]{4,512}$/) ||
!formData.title) {
console.error('[Telegram.Payments] Invalid form data submitted', formData);
throw Error('PaymentFormDataInvalid');
}
postEvent('payment_form_submit', false, formData);
}
};
window.Telegram.WebApp = {
MainButton: MainButton,
onEvent: function(eventType, callback) {
Object.defineProperty(WebApp, 'initDataUnsafe', {
get: function(){ return webAppInitDataUnsafe; },
enumerable: true
});
Object.defineProperty(WebApp, 'colorScheme', {
get: function(){ return colorScheme; },
enumerable: true
});
Object.defineProperty(WebApp, 'themeParams', {
get: function(){ return themeParams; },
enumerable: true
});
Object.defineProperty(WebApp, 'isExpanded', {
get: function(){ return isExpanded; },
enumerable: true
});
Object.defineProperty(WebApp, 'viewportHeight', {
get: function(){ return (viewportHeight === false ? window.innerHeight : viewportHeight) - mainButtonHeight; },
enumerable: true
});
Object.defineProperty(WebApp, 'viewportStableHeight', {
get: function(){ return (viewportStableHeight === false ? window.innerHeight : viewportStableHeight) - mainButtonHeight; },
enumerable: true
});
Object.defineProperty(WebApp, 'MainButton', {
value: MainButton,
enumerable: true
});
WebApp.onEvent = function(eventType, callback) {
onWebViewEvent(eventType, callback);
},
offEvent: function(eventType, callback) {offWebViewEvent(eventType, callback);
},
sendData: function (data) {
};
WebApp.offEvent = function(eventType, callback) {offWebViewEvent(eventType, callback);
};
WebApp.sendData = function (data) {
if (!data || !data.length) {
console.error('[Telegram.WebApp] Data is required', data);
throw Error('WebAppDataInvalid');
@ -646,66 +677,27 @@
console.error('[Telegram.WebApp] Data is too long', data);
throw Error('WebAppDataInvalid');
}
postEvent('web_app_data_send', false, {data: data});
},
ready: function () {
postEvent('web_app_ready');
},
expand: function () {
postEvent('web_app_expand');
},
close: function () {
postEvent('web_app_close');
}
WebView.postEvent('web_app_data_send', false, {data: data});
};
Object.defineProperty(window.Telegram.WebApp, 'initData', {
get: function(){ return webAppData; },
enumerable: true
});
Object.defineProperty(window.Telegram.WebApp, 'initDataRaw', {
get: function(){ return webAppDataRaw; },
enumerable: true
});
Object.defineProperty(window.Telegram.WebApp, 'colorScheme', {
get: function(){ return colorScheme; },
enumerable: true
});
Object.defineProperty(window.Telegram.WebApp, 'themeParams', {
get: function(){ return themeParams; },
enumerable: true
});
Object.defineProperty(window.Telegram.WebApp, 'isExpanded', {
get: function(){ return isExpanded; },
enumerable: true
});
Object.defineProperty(window.Telegram.WebApp, 'viewportHeight', {
get: function(){ return (viewportHeight === false ? window.innerHeight : viewportHeight) - mainButtonHeight; },
enumerable: true
});
Object.defineProperty(window.Telegram.WebApp, 'viewportStableHeight', {
get: function(){ return (viewportStableHeight === false ? window.innerHeight : viewportStableHeight) - mainButtonHeight; },
enumerable: true
});
WebApp.ready = function () {
WebView.postEvent('web_app_ready');
};
WebApp.expand = function () {
WebView.postEvent('web_app_expand');
};
WebApp.close = function () {
WebView.postEvent('web_app_close');
};
window.Telegram.WebApp = WebApp;
setViewportHeight();
window.addEventListener('resize', onWindowResize);
onEvent('theme_changed', onThemeChanged);
onEvent('viewport_changed', onViewportChanged);
postEvent('web_app_request_theme');
postEvent('web_app_request_viewport');
// For Windows Phone app
window.TelegramGameProxy_receiveEvent = receiveEvent;
// Backward compatibility
window.TelegramGameProxy = {
initParams: initParams,
onEvent: onEvent,
receiveEvent: receiveEvent,
shareScore: window.Telegram.Games.shareScore,
paymentFormSubmit: window.Telegram.Payments.submitPaymentForm
};
WebView.onEvent('theme_changed', onThemeChanged);
WebView.onEvent('viewport_changed', onViewportChanged);
WebView.postEvent('web_app_request_theme');
WebView.postEvent('web_app_request_viewport');
})();

View file

@ -198,7 +198,7 @@
</div><div class="tr-section-col col-lg-4 col-xs-6">
<div class="tr-section-wrap"><a href="/en/android/groups_and_channels/" class="tr-section">
<div class="tr-section-cover cover8"></div>
<div class="tr-section-caption">Groups And Channels (1045)</div>
<div class="tr-section-caption">Groups And Channels (1046)</div>
</a></div>
</div><div class="tr-section-col col-lg-4 col-xs-6">
<div class="tr-section-wrap"><a href="/en/android/profile/" class="tr-section">
@ -233,7 +233,7 @@
</div><div class="tr-section-col col-lg-4 col-xs-6">
<div class="tr-section-wrap"><a href="/en/android/unsorted/" class="tr-section">
<div class="tr-section-cover cover0"></div>
<div class="tr-section-caption">Unsorted (632)</div>
<div class="tr-section-caption">Unsorted (631)</div>
</a></div>
</div>
</section></section>

View file

@ -13507,6 +13507,19 @@
<div class="tr-value-suggestions">
</div>
</div>
</div>
</div><div class="tr-key-row-wrap">
<div class="tr-key-row" data-href="/en/android/groups_and_channels/ChannelCantOpenBannedByAdmin" data-langpack="android" data-section="groups_and_channels" data-key="ChannelCantOpenBannedByAdmin">
<div class="tr-value-media"><a class="tr-value-photo bg-image key-layer" style="background-image:url('https://telegra.ph/file/p/f13ab9728fd/c634fc5cec3c7eb620da817.jpg?c=38,254,500,500,280,280');" href="/screenshots/10991/phrase/ChannelCantOpenBannedByAdmin" data-layer><div class="screenshot-key" style="padding:78px 12px 41px 8px;"><div class="key-box"></div></div></a></div>
<div class="tr-value-body">
<span class="has-binding binding"></span>
<div class="tr-value-default"><a class="tr-value-link" href="/en/android/groups_and_channels/ChannelCantOpenBannedByAdmin"><span class="p-value"><span class="value">Sorry, you can&#39;t access this chat because you were banned by an admin.</span></span></a></div>
<div class="tr-value-key">ChannelCantOpenBannedByAdmin</div>
<div class="tr-value-suggestions">
</div>
</div>
</div>

View file

@ -2700,19 +2700,6 @@
<div class="tr-value-suggestions">
</div>
</div>
</div>
</div><div class="tr-key-row-wrap">
<div class="tr-key-row" data-href="/en/android/unsorted/ChannelCantOpenBannedByAdmin" data-langpack="android" data-section="unsorted" data-key="ChannelCantOpenBannedByAdmin">
<div class="tr-value-media"><div class="tr-value-photo"></div></div>
<div class="tr-value-body">
<span class="has-binding binding"></span>
<div class="tr-value-default"><a class="tr-value-link" href="/en/android/unsorted/ChannelCantOpenBannedByAdmin"><span class="p-value"><span class="value">Sorry, you can&#39;t access this chat because you were banned by an admin.</span></span></a></div>
<div class="tr-value-key">ChannelCantOpenBannedByAdmin</div>
<div class="tr-value-suggestions">
</div>
</div>
</div>
@ -5199,8 +5186,7 @@
</div>
</div>
</div>
</div><div class="tr-load-more load-more" data-offset="400"><a class="btn btn-default load-more-btn">Load More</a></div>
<div class="tr-key-row-wrap">
</div><div class="tr-key-row-wrap">
<div class="tr-key-row" data-href="/en/android/unsorted/FilterRemoveExclusionTitle" data-langpack="android" data-section="unsorted" data-key="FilterRemoveExclusionTitle">
<div class="tr-value-media"><div class="tr-value-photo"></div></div>
<div class="tr-value-body">
@ -5213,7 +5199,8 @@
</div>
</div>
</div>
</div><div class="tr-key-row-wrap">
</div><div class="tr-load-more load-more" data-offset="400"><a class="btn btn-default load-more-btn">Load More</a></div>
<div class="tr-key-row-wrap">
<div class="tr-key-row" data-href="/en/android/unsorted/FilterAvailableTitle" data-langpack="android" data-section="unsorted" data-key="FilterAvailableTitle">
<div class="tr-value-media"><div class="tr-value-photo"></div></div>
<div class="tr-value-body">
@ -7800,8 +7787,7 @@
</div>
</div>
</div>
</div><div class="tr-load-more load-more" data-offset="600"><a class="btn btn-default load-more-btn">Load More</a></div>
<div class="tr-key-row-wrap">
</div><div class="tr-key-row-wrap">
<div class="tr-key-row" data-href="/en/android/unsorted/MasksCount" data-langpack="android" data-section="unsorted" data-key="MasksCount">
<div class="tr-value-media"><div class="tr-value-photo"></div></div>
<div class="tr-value-body">
@ -7814,7 +7800,8 @@
</div>
</div>
</div>
</div><div class="tr-key-row-wrap">
</div><div class="tr-load-more load-more" data-offset="600"><a class="btn btn-default load-more-btn">Load More</a></div>
<div class="tr-key-row-wrap">
<div class="tr-key-row" data-href="/en/android/unsorted/Videos" data-langpack="android" data-section="unsorted" data-key="Videos">
<div class="tr-value-media"><div class="tr-value-photo"></div></div>
<div class="tr-value-body">

View file

@ -9,7 +9,7 @@
<meta name="MobileOptimized" content="176" />
<meta name="HandheldFriendly" content="True" />
<meta name="robots" content="noindex, nofollow" />
<script src="https://tg.dev/js/telegram-webview.js?14"></script>
<script src="https://tg.dev/js/telegram-web-app.js?1"></script>
<script>
function setThemeClass() {
document.documentElement.className = Telegram.WebApp.colorScheme;
@ -441,7 +441,7 @@
</div>
<script src="https://tg.dev/js/jquery.min.js"></script>
<script src="https://tg.dev/js/tgsticker.js?27"></script>
<script src="/js/cafe.js?16"></script>
<script src="/js/cafe.js?17"></script>
<script>Cafe.init({"apiUrl":"\/cafe\/api","userId":0,"userHash":null});</script>
</body>
</html>

View file

@ -8,7 +8,7 @@
<meta name="MobileOptimized" content="176" />
<meta name="HandheldFriendly" content="True" />
<meta name="robots" content="noindex,nofollow" />
<script src="https://telegram.org/js/telegram-webview.js?14"></script>
<script src="https://telegram.org/js/telegram-web-app.js?1"></script>
<script>
function setThemeClass() {
document.documentElement.className = Telegram.WebApp.colorScheme;
@ -190,11 +190,11 @@
<script>
Telegram.WebApp.ready();
var WebAppData = Telegram.WebApp.initData || {};
var WebAppDataRaw = Telegram.WebApp.initDataRaw || '';
var initData = Telegram.WebApp.initData || '';
var initDataUnsafe = Telegram.WebApp.initDataUnsafe || {};
function sendMessage(msg_id, with_webview) {
if (!WebAppData.query_id) {
if (!initDataUnsafe.query_id) {
alert('WebViewQueryId not defined');
return;
}
@ -202,7 +202,7 @@ function sendMessage(msg_id, with_webview) {
$('#btn_status').text('Sending...').removeClass('ok err').show();
$.ajax('/demo/sendMessage', {
type: 'POST',
data: {_auth: WebAppDataRaw, query_id: WebAppData.query_id, msg_id: msg_id || '', with_webview: !WebAppData.receiver && with_webview ? 1 : 0},
data: {_auth: initData, msg_id: msg_id || '', with_webview: !initDataUnsafe.receiver && with_webview ? 1 : 0},
dataType: 'json',
success: function(result) {
$('button').prop('disabled', false);
@ -230,7 +230,7 @@ function changeButton() {
$('#btn_status').text('Changing button...').removeClass('ok err').show();
$.ajax('/demo/changeMenuButton', {
type: 'POST',
data: {_auth: WebAppDataRaw},
data: {_auth: initData},
dataType: 'json',
success: function(result) {
$('button').prop('disabled', false);
@ -331,18 +331,18 @@ Telegram.WebApp.onEvent('themeChanged', function() {
$('#theme_data').html(JSON.stringify(Telegram.WebApp.themeParams, null, 2));
});
$('#main_btn').toggle(!!WebAppData.query_id);
$('#with_webview_btn').toggle(!!WebAppData.query_id && !WebAppData.receiver);
// $('#data_btn').toggle(!WebAppData.query_id || !WebAppData.receiver);
$('#webview_data').html(JSON.stringify(WebAppData, null, 2));
$('#main_btn').toggle(!!initDataUnsafe.query_id);
$('#with_webview_btn').toggle(!!initDataUnsafe.query_id && !initDataUnsafe.receiver);
// $('#data_btn').toggle(!initDataUnsafe.query_id || !initDataUnsafe.receiver);
$('#webview_data').html(JSON.stringify(initDataUnsafe, null, 2));
$('#theme_data').html(JSON.stringify(Telegram.WebApp.themeParams, null, 2));
$('#regular_link').attr('href', $('#regular_link').attr('href') + location.hash);
$('#text_field').focus();
if (WebAppData.query_id && WebAppDataRaw) {
if (initDataUnsafe.query_id && initData) {
$('#webview_data_status').show();
$.ajax('/demo/checkData', {
type: 'POST',
data: {_auth: WebAppDataRaw},
data: {_auth: initData},
dataType: 'json',
success: function(result) {
if (result.ok) {

View file

@ -15,9 +15,9 @@ var Cafe = {
Cafe.userId = options.userId;
Cafe.userHash = options.userHash;
Cafe.initLotties();
var userId = Telegram.WebApp.initData && Telegram.WebApp.initData.user && Telegram.WebApp.initData.user.id || Cafe.userId;
$('body').show();
if (!userId) {
if (!Telegram.WebApp.initDataUnsafe ||
!Telegram.WebApp.initDataUnsafe.query_id) {
Cafe.isClosed = true;
$('body').addClass('closed');
Cafe.showStatus('Cafe is temporarily closed');
@ -255,9 +255,7 @@ var Cafe = {
order_data: Cafe.getOrderData(),
comment: comment
};
if (!Telegram.WebApp.initData ||
!Telegram.WebApp.initData.user ||
!Telegram.WebApp.initData.user.id) {
if (Cafe.userId && Cafe.userHash) {
params.user_id = Cafe.userId;
params.user_hash = Cafe.userHash;
}
@ -290,7 +288,7 @@ var Cafe = {
$('.js-status').removeClass('shown');
},
apiRequest: function(method, data, onCallback) {
var authData = Telegram.WebApp.initDataRaw || '';
var authData = Telegram.WebApp.initData || '';
$.ajax(Cafe.apiUrl, {
type: 'POST',
data: $.extend(data, {_auth: authData, method: method}),