Update content of files

This commit is contained in:
GitHub Action 2022-05-20 21:38:29 +00:00
parent cf97d9042f
commit 558b1dbcfd
4 changed files with 166 additions and 6 deletions

View file

@ -450,6 +450,85 @@
return s; return s;
} }
var windowOpen = window.open;
window.open = function(url) {
WebApp.openLink(url);
};
var BackButton = (function() {
var isVisible = false;
var backButton = {};
Object.defineProperty(backButton, 'isVisible', {
set: function(val){ setParams({is_visible: val}); },
get: function(){ return isVisible; },
enumerable: true
});
var curButtonState = null;
WebView.onEvent('back_button_pressed', onBackButtonPressed);
function onBackButtonPressed() {
receiveWebViewEvent('backButtonClicked');
}
function buttonParams() {
return {is_visible: isVisible};
}
function buttonState(btn_params) {
if (typeof btn_params === 'undefined') {
btn_params = buttonParams();
}
return JSON.stringify(btn_params);
}
function buttonCheckVersion() {
if (!versionAtLeast('6.1')) {
console.warn('[Telegram.WebApp] BackButton is not supported in version ' + webAppVersion);
}
}
function updateButton() {
var btn_params = buttonParams();
var btn_state = buttonState(btn_params);
if (curButtonState === btn_state) {
return;
}
curButtonState = btn_state;
WebView.postEvent('web_app_setup_back_button', false, btn_params);
}
function setParams(params) {
if (typeof params.is_visible !== 'undefined') {
isVisible = !!params.is_visible;
}
updateButton();
return backButton;
}
backButton.onClick = function(callback) {
buttonCheckVersion();
onWebViewEvent('backButtonClicked', callback);
return backButton;
};
backButton.offClick = function(callback) {
buttonCheckVersion();
offWebViewEvent('backButtonClicked', callback);
return backButton;
};
backButton.show = function() {
buttonCheckVersion();
return setParams({is_visible: true});
};
backButton.hide = function() {
buttonCheckVersion();
return setParams({is_visible: false});
};
return backButton;
})();
var mainButtonHeight = 0; var mainButtonHeight = 0;
var MainButton = (function() { var MainButton = (function() {
var isVisible = false; var isVisible = false;
@ -681,6 +760,51 @@
return mainButton; return mainButton;
})(); })();
var HapticFeedback = (function() {
var hapticFeedback = {};
function triggerFeedback(params) {
if (params.type == 'impact') {
if (params.impact_style != 'light' &&
params.impact_style != 'medium' &&
params.impact_style != 'heavy' &&
params.impact_style != 'rigid' &&
params.impact_style != 'soft') {
console.error('[Telegram.WebApp] Haptic impact style is invalid', params.impact_style);
throw Error('WebAppHapticImpactStyleInvalid');
}
} else if (params.type == 'notification') {
if (params.notification_type != 'error' &&
params.notification_type != 'success' &&
params.notification_type != 'warning') {
console.error('[Telegram.WebApp] Haptic notification type is invalid', params.notification_type);
throw Error('WebAppHapticNotificationTypeInvalid');
}
} else if (params.type == 'selection_change') {
// no params needed
} else {
console.error('[Telegram.WebApp] Haptic feedback type is invalid', params.type);
throw Error('WebAppHapticFeedbackTypeInvalid');
}
if (!versionAtLeast('6.1')) {
console.warn('[Telegram.WebApp] HapticFeedback is not supported in version ' + webAppVersion);
}
WebView.postEvent('web_app_trigger_haptic_feedback', false, params);
return hapticFeedback;
}
hapticFeedback.impactOccupped = function(style) {
return triggerFeedback({type: 'impact', impact_style: style});
};
hapticFeedback.notificationOccurred = function(type) {
return triggerFeedback({type: 'notification', notification_type: type});
};
hapticFeedback.selectionChanged = function() {
return triggerFeedback({type: 'selection_change'});
};
return hapticFeedback;
})();
var webAppInvoices = {}; var webAppInvoices = {};
function onInvoiceClosed(eventType, eventData) { function onInvoiceClosed(eventType, eventData) {
if (eventData.slug && webAppInvoices[eventData.slug]) { if (eventData.slug && webAppInvoices[eventData.slug]) {
@ -732,10 +856,18 @@
get: function(){ return (viewportStableHeight === false ? window.innerHeight : viewportStableHeight) - mainButtonHeight; }, get: function(){ return (viewportStableHeight === false ? window.innerHeight : viewportStableHeight) - mainButtonHeight; },
enumerable: true enumerable: true
}); });
Object.defineProperty(WebApp, 'BackButton', {
value: BackButton,
enumerable: true
});
Object.defineProperty(WebApp, 'MainButton', { Object.defineProperty(WebApp, 'MainButton', {
value: MainButton, value: MainButton,
enumerable: true enumerable: true
}); });
Object.defineProperty(WebApp, 'HapticFeedback', {
value: HapticFeedback,
enumerable: true
});
WebApp.isVersionAtLeast = function(ver) { WebApp.isVersionAtLeast = function(ver) {
return versionAtLeast(ver); return versionAtLeast(ver);
}; };
@ -755,6 +887,21 @@
} }
WebView.postEvent('web_app_data_send', false, {data: data}); WebView.postEvent('web_app_data_send', false, {data: data});
}; };
WebApp.openLink = function (url) {
var a = document.createElement('A');
a.href = url;
if (a.protocol != 'http:' &&
a.protocol != 'https:') {
console.error('[Telegram.WebApp] Url protocol is not supported', url);
throw Error('WebAppTgUrlInvalid');
}
var url = a.href;
if (versionAtLeast('6.1')) {
WebView.postEvent('web_app_open_link', false, {url: url});
} else {
windowOpen(url, '_blank');
}
};
WebApp.openTelegramLink = function (url) { WebApp.openTelegramLink = function (url) {
var a = document.createElement('A'); var a = document.createElement('A');
a.href = url; a.href = url;
@ -768,7 +915,7 @@
throw Error('WebAppTgUrlInvalid'); throw Error('WebAppTgUrlInvalid');
} }
var path_full = a.pathname + a.search; var path_full = a.pathname + a.search;
if (isIframe || versionAtLeast('1.1')) { if (isIframe || versionAtLeast('6.1')) {
WebView.postEvent('web_app_open_tg_link', false, {path_full: path_full}); WebView.postEvent('web_app_open_tg_link', false, {path_full: path_full});
} else { } else {
location.href = 'https://t.me' + path_full; location.href = 'https://t.me' + path_full;
@ -785,7 +932,7 @@
console.error('[Telegram.WebApp] Invoice url is invalid', url); console.error('[Telegram.WebApp] Invoice url is invalid', url);
throw Error('WebAppInvoiceUrlInvalid'); throw Error('WebAppInvoiceUrlInvalid');
} }
if (!versionAtLeast('1.1')) { if (!versionAtLeast('6.1')) {
console.error('[Telegram.WebApp] Method openInvoice is not supported in version ' + webAppVersion); console.error('[Telegram.WebApp] Method openInvoice is not supported in version ' + webAppVersion);
throw Error('WebAppMethodUnsupported'); throw Error('WebAppMethodUnsupported');
} }

View file

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

View file

@ -8,7 +8,7 @@
<meta name="MobileOptimized" content="176" /> <meta name="MobileOptimized" content="176" />
<meta name="HandheldFriendly" content="True" /> <meta name="HandheldFriendly" content="True" />
<meta name="robots" content="noindex,nofollow" /> <meta name="robots" content="noindex,nofollow" />
<script src="https://telegram.org/js/telegram-web-app.js?9"></script> <script src="https://telegram.org/js/telegram-web-app.js?10"></script>
<script> <script>
function setThemeClass() { function setThemeClass() {
document.documentElement.className = Telegram.WebApp.colorScheme; document.documentElement.className = Telegram.WebApp.colorScheme;
@ -170,7 +170,8 @@
<li><a href="https://telegram.org/" target="_blank">target="_blank" link</a> (opens outside webview)</li> <li><a href="https://telegram.org/" target="_blank">target="_blank" link</a> (opens outside webview)</li>
<li><a href="javascript:window.open('https://telegram.org/');">window.open() link</a> (opens outside webview)</li> <li><a href="javascript:window.open('https://telegram.org/');">window.open() link</a> (opens outside webview)</li>
<li><a href="https://t.me/like">LikeBot t.me link</a> (opens inside Telegram app)</li> <li><a href="https://t.me/like">LikeBot t.me link</a> (opens inside Telegram app)</li>
<li><a href="javascript:Telegram.WebApp.openTelegramLink('https://t.me/VoteBot');">web_app_open_tg_link()</a> (opens inside Telegram app)</li> <li><a href="javascript:Telegram.WebApp.openTelegramLink('https://t.me/vote');">web_app_open_tg_link()</a> (opens inside Telegram app)</li>
<li><a href="javascript:Telegram.WebApp.openLink('https://google.com/');">web_app_open_link()</a> (opens outside webview)</li>
<li><a href="tg://resolve?domain=vote">VoteBot tg:// link</a> (does not open)</li> <li><a href="tg://resolve?domain=vote">VoteBot tg:// link</a> (does not open)</li>
</ul> </ul>
<p>Test permissions:</p> <p>Test permissions:</p>
@ -185,6 +186,12 @@
<li><a href="javascript:;" onclick="confirm('Are you sure?');">confirm</a></li> <li><a href="javascript:;" onclick="confirm('Are you sure?');">confirm</a></li>
<li><a href="javascript:;" onclick="prompt('How old are you?');">prompt</a></li> <li><a href="javascript:;" onclick="prompt('How old are you?');">prompt</a></li>
</ul> </ul>
<p>Haptics:</p>
<ul>
<li>Impact: <a href="javascript:Telegram.WebApp.HapticFeedback.impactOccupped('heavy');">heavy</a>, <a href="javascript:Telegram.WebApp.HapticFeedback.impactOccupped('light');">light</a>, <a href="javascript:Telegram.WebApp.HapticFeedback.impactOccupped('medium');">medium</a>, <a href="javascript:Telegram.WebApp.HapticFeedback.impactOccupped('rigid');">rigid</a>, <a href="javascript:Telegram.WebApp.HapticFeedback.impactOccupped('soft');">soft</a></li>
<li>Notification: <a href="javascript:Telegram.WebApp.HapticFeedback.notificationOccurred('error');">error</a>, <a href="javascript:Telegram.WebApp.HapticFeedback.notificationOccurred('success');">success</a>, <a href="javascript:Telegram.WebApp.HapticFeedback.notificationOccurred('warning');">warning</a></li>
<li>Selection: <a href="javascript:Telegram.WebApp.HapticFeedback.selectionChanged();">changed</a></li>
</ul>
<pre><code id="webview_data"></code></pre> <pre><code id="webview_data"></code></pre>
<div class="hint"> <div class="hint">
Data passed to webview. Data passed to webview.

View file

@ -34,6 +34,7 @@ var Cafe = {
Telegram.WebApp.MainButton.setParams({ Telegram.WebApp.MainButton.setParams({
text_color: '#fff' text_color: '#fff'
}).onClick(Cafe.mainBtnClicked); }).onClick(Cafe.mainBtnClicked);
Telegram.WebApp.BackButton.onClick(Cafe.backBtnClicked);
initRipple(); initRipple();
}, },
initLotties: function() { initLotties: function() {
@ -65,6 +66,9 @@ var Cafe = {
e.preventDefault(); e.preventDefault();
Cafe.toggleMode(false); Cafe.toggleMode(false);
}, },
backBtnClicked: function() {
Cafe.toggleMode(false);
},
getOrderItem: function(itemEl) { getOrderItem: function(itemEl) {
var id = itemEl.data('item-id'); var id = itemEl.data('item-id');
return $('.js-order-item').filter(function() { return $('.js-order-item').filter(function() {
@ -224,6 +228,7 @@ var Cafe = {
RLottie.setVisible(this, true); RLottie.setVisible(this, true);
}); });
}, anim_duration); }, anim_duration);
Telegram.WebApp.BackButton.show();
} else { } else {
$('.js-item-lottie').each(function() { $('.js-item-lottie').each(function() {
RLottie.setVisible(this, false); RLottie.setVisible(this, false);
@ -236,6 +241,7 @@ var Cafe = {
RLottie.setVisible(this, true); RLottie.setVisible(this, true);
}); });
}, anim_duration); }, anim_duration);
Telegram.WebApp.BackButton.hide();
} }
Cafe.updateMainButton(); Cafe.updateMainButton();
}, },