[mirotalk] - #329 Fix full screen mode

This commit is contained in:
Miroslav Pejic
2026-02-09 00:08:27 +01:00
parent 25a37b7587
commit 778fbd94e0
7 changed files with 42 additions and 26 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
# ====================================================
# MiroTalk P2P v.1.7.24 - Environment Configuration
# MiroTalk P2P v.1.7.25 - Environment Configuration
# ====================================================
# App environment
+1 -1
View File
@@ -2,7 +2,7 @@
/**
* ==============================================
* MiroTalk P2P v.1.7.24 - Configuration File
* MiroTalk P2P v.1.7.25 - Configuration File
* ==============================================
*
* Branding and customizations require a license:
+1 -1
View File
@@ -45,7 +45,7 @@ dependencies: {
* @license For commercial use or closed source, contact us at license.mirotalk@gmail.com or purchase directly from CodeCanyon
* @license CodeCanyon: https://codecanyon.net/item/mirotalk-p2p-webrtc-realtime-video-conferences/38376661
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com
* @version 1.7.24
* @version 1.7.25
*
*/
+14 -14
View File
@@ -1,18 +1,18 @@
{
"name": "mirotalk",
"version": "1.7.24",
"version": "1.7.25",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "mirotalk",
"version": "1.7.24",
"version": "1.7.25",
"license": "AGPL-3.0",
"dependencies": {
"@mattermost/client": "11.3.0",
"@ngrok/ngrok": "1.7.0",
"@sentry/node": "^10.38.0",
"axios": "^1.13.4",
"axios": "^1.13.5",
"chokidar": "^5.0.0",
"colors": "^1.4.0",
"compression": "^1.8.1",
@@ -1655,13 +1655,13 @@
}
},
"node_modules/axios": {
"version": "1.13.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.4.tgz",
"integrity": "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==",
"version": "1.13.5",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz",
"integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.4",
"follow-redirects": "^1.15.11",
"form-data": "^4.0.5",
"proxy-from-env": "^1.1.0"
}
},
@@ -3178,9 +3178,9 @@
}
},
"node_modules/follow-redirects": {
"version": "1.15.9",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
"integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
"version": "1.15.11",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
"funding": [
{
"type": "individual",
@@ -3230,9 +3230,9 @@
}
},
"node_modules/form-data": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
"integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "mirotalk",
"version": "1.7.24",
"version": "1.7.25",
"description": "A free WebRTC browser-based video call",
"main": "server.js",
"scripts": {
@@ -44,7 +44,7 @@
"@mattermost/client": "11.3.0",
"@ngrok/ngrok": "1.7.0",
"@sentry/node": "^10.38.0",
"axios": "^1.13.4",
"axios": "^1.13.5",
"chokidar": "^5.0.0",
"colors": "^1.4.0",
"compression": "^1.8.1",
+1 -1
View File
@@ -79,7 +79,7 @@ let brand = {
},
about: {
imageUrl: '../images/mirotalk-logo.gif',
title: 'WebRTC P2P v1.7.24',
title: 'WebRTC P2P v1.7.25',
html: `
<button
id="support-button"
+22 -6
View File
@@ -15,7 +15,7 @@
* @license For commercial use or closed source, contact us at license.mirotalk@gmail.com or purchase directly from CodeCanyon
* @license CodeCanyon: https://codecanyon.net/item/mirotalk-p2p-webrtc-realtime-video-conferences/38376661
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com
* @version 1.7.24
* @version 1.7.25
*
*/
@@ -4889,10 +4889,16 @@ function handleVideoPlayerFs(videoId, videoFullScreenBtnId, peer_id = null) {
if (!videoPlayer || !videoFullScreenBtn) return;
// Prefer fullscreen on the wrapper tile (.Camera) to avoid browser-specific fullscreen video behaviors
const videoWrap = videoPlayer.closest('.Camera') || videoPlayer.parentElement;
// Prefer fullscreen on the wrapper tile (.Camera/.Screen) to avoid browser-specific fullscreen video behaviors
const videoWrap = videoPlayer.closest('.Camera, .Screen') || videoPlayer.parentElement;
const fsTarget = videoWrap || videoPlayer;
// Detect if this fullscreen handler is attached to a screen-share tile
const isScreenTile =
!!videoPlayer.closest('.Screen') ||
String(videoId).includes('___screen') ||
String(videoPlayer.style?.name || '').includes('typeScreen');
const getFsElement = () =>
document.fullscreenElement ||
document.webkitFullscreenElement ||
@@ -4959,10 +4965,20 @@ function handleVideoPlayerFs(videoId, videoFullScreenBtnId, peer_id = null) {
});
function gotoFS() {
// handle remote peer video fs
// handle remote peer video/screen fs
if (peer_id !== null) {
if (isScreenTile) {
const remoteScreenStatusBtn = getId(peer_id + '_screenStatus');
if (!remoteScreenStatusBtn || remoteScreenStatusBtn.className === className.videoOn) {
handleFSVideo();
} else {
showMsg();
}
return;
}
const remoteVideoStatusBtn = getId(peer_id + '_videoStatus');
if (remoteVideoStatusBtn.className === className.videoOn) {
if (remoteVideoStatusBtn && remoteVideoStatusBtn.className === className.videoOn) {
handleFSVideo();
} else {
showMsg();
@@ -13643,7 +13659,7 @@ function showAbout() {
Swal.fire({
background: swBg,
position: 'center',
title: brand.about?.title && brand.about.title.trim() !== '' ? brand.about.title : 'WebRTC P2P v1.7.24',
title: brand.about?.title && brand.about.title.trim() !== '' ? brand.about.title : 'WebRTC P2P v1.7.25',
imageUrl: brand.about?.imageUrl && brand.about.imageUrl.trim() !== '' ? brand.about.imageUrl : images.about,
customClass: { image: 'img-about' },
html: `