diff --git a/Web/Presenters/templates/Apps/Play.latte b/Web/Presenters/templates/Apps/Play.latte
index c268ddeb0..d0143d231 100644
--- a/Web/Presenters/templates/Apps/Play.latte
+++ b/Web/Presenters/templates/Apps/Play.latte
@@ -16,7 +16,7 @@
{block header}
{$name}
- {_report}
+ [{_report}] [{_menu_settings}] [π]
{/block}
{block content}
@@ -43,6 +43,53 @@
window.appTitle = {$name};
window.appPerms = {$perms};
window.appOrigin = {$origin};
+ window.fsApps = JSON.parse(localStorage.getItem("fullscreen_apps") || "[]");
+
+
+
{script "js/al_games.js"}
diff --git a/Web/static/css/main.css b/Web/static/css/main.css
index 39ea4f1b1..6731d1076 100644
--- a/Web/static/css/main.css
+++ b/Web/static/css/main.css
@@ -4828,3 +4828,45 @@ hr {
white-space: nowrap;
}
}
+
+html.app_fullscreen {
+ overflow-y: hidden !important;
+}
+
+html.app_fullscreen .page_header {
+ z-index: 0;
+}
+
+html.app_fullscreen #app_dev {
+ display: none;
+}
+
+body.dimmed .dimmer {
+ z-index: 1023;
+}
+
+#ajax_audio_player {
+ z-index: 1020;
+}
+
+center.app_fullscreen {
+ position: fixed;
+ display: flex;
+ flex-direction: column;
+ width: 100vw;
+ height: 100vh;
+ text-align: left;
+ top: 0;
+ left: 0;
+}
+
+.app_fullscreen #appFrame, .app_fullscreen .page_yellowheader {
+ z-index: 1021;
+}
+
+.app_fullscreen #appFrame {
+ position: relative;
+ width: 100% !important;
+ height: auto !important;
+ flex: 1;
+}
\ No newline at end of file
diff --git a/Web/static/js/options.js b/Web/static/js/options.js
index 2e9e85df7..4da0d6a04 100644
--- a/Web/static/js/options.js
+++ b/Web/static/js/options.js
@@ -181,6 +181,12 @@ window.tweaks = [
`)
u("#appFrame").closest("center").addClass("app_block")
}),
+ new TweakOption("apps.fullscreen_show_notifications", function () {
+ this.customCSS(`html.app_fullscreen .notifications_global_wrap {z-index: 1022;}`)
+ }),
+ new TweakOption("apps.fullscreen_show_ajax_player", function () {
+ this.customCSS(`html.app_fullscreen #ajax_audio_player {z-index: 1025;}`)
+ }),
new TweakOption("wall.hide_edit_mark", function () {
this.customCSS(`.editedMark {display: none;}`)
}),
diff --git a/Web/static/js/router.js b/Web/static/js/router.js
index 454b805b3..a95566ff3 100644
--- a/Web/static/js/router.js
+++ b/Web/static/js/router.js
@@ -160,6 +160,8 @@ window.router = new class {
await window.player._handlePageTransition()
}
+ if (u("html").hasClass("app_fullscreen")) { u("html").removeClass("app_fullscreen") }
+
this.applyTweaks()
/*window.document.dispatchEvent(new Event("DOMContentLoaded", {
diff --git a/locales/en.strings b/locales/en.strings
index 2ec5d4533..2e3588034 100644
--- a/locales/en.strings
+++ b/locales/en.strings
@@ -1339,6 +1339,7 @@
"app_err_note_desc" = "Make sure the link is correct and the note belongs to you.";
"app_delete_modal_desc" = "Are you sure you want to delete the app? This action cannot be undone.";
"app_delete_succ" = "The app has been deleted";
+"app_start_fullscreen" = "Start app in fullscreen mode automatically";
"learn_more" = "Learn more";
diff --git a/locales/ru.strings b/locales/ru.strings
index f12221c8a..ff3af0c56 100644
--- a/locales/ru.strings
+++ b/locales/ru.strings
@@ -1272,6 +1272,7 @@
"app_err_note_desc" = "Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΡΡΠ»ΠΊΠ° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ ΠΈ Π·Π°ΠΌΠ΅ΡΠΊΠ° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΠ°ΠΌ.";
"app_delete_modal_desc" = "ΠΡ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅? ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π΅Π»ΡΠ·Ρ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ.";
"app_delete_succ" = "ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΎ";
+"app_start_fullscreen" = "ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅";
"learn_more" = "ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅";