From a637829a8eb8fe6d4a69268f10ada9c0d6acc3e9 Mon Sep 17 00:00:00 2001
From: Dominik Hebeler <dominik@suma-ev.de>
Date: Fri, 19 Jul 2024 13:29:05 +0200
Subject: [PATCH] add setting to disable tiles on startpage

---
 metager/app/Http/Controllers/SettingsController.php    | 10 ++++++++++
 metager/app/Http/Controllers/TilesController.php       |  3 +++
 metager/app/SearchSettings.php                         |  5 +++++
 metager/lang/de/settings.php                           |  3 +++
 metager/lang/en/settings.php                           |  3 +++
 metager/resources/js/startpage/tiles.js                |  2 +-
 .../resources/less/metager/pages/startpage/tiles.less  |  1 +
 metager/resources/views/settings/index.blade.php       | 10 ++++++++++
 8 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/metager/app/Http/Controllers/SettingsController.php b/metager/app/Http/Controllers/SettingsController.php
index 5b20e5842..2636109a5 100644
--- a/metager/app/Http/Controllers/SettingsController.php
+++ b/metager/app/Http/Controllers/SettingsController.php
@@ -298,6 +298,15 @@ class SettingsController extends Controller
             }
         }
 
+        $tiles_startpage = $request->input('tiles_startpage', '');
+        if (!empty($tiles_startpage)) {
+            if ($tiles_startpage === "off") {
+                Cookie::queue(Cookie::forever('tiles_startpage', 'off', '/', null, $secure, false));
+            } elseif ($tiles_startpage === "on") {
+                Cookie::queue(Cookie::forget("tiles_startpage", "/"));
+            }
+        }
+
         $quotes = $request->input('zitate', '');
         if (!empty($quotes)) {
             if ($quotes === "off") {
@@ -349,6 +358,7 @@ class SettingsController extends Controller
             "new_tab",
             "zitate",
             "self_advertisements",
+            "tiles_startpage",
             "suggestions",
         ];
 
diff --git a/metager/app/Http/Controllers/TilesController.php b/metager/app/Http/Controllers/TilesController.php
index 042efe00a..9cef7309b 100644
--- a/metager/app/Http/Controllers/TilesController.php
+++ b/metager/app/Http/Controllers/TilesController.php
@@ -38,6 +38,9 @@ class TilesController extends Controller
      */
     public static function TILES(string $ckey): array
     {
+        // Check if the user has disabled tiles
+        if (!app(SearchSettings::class)->tiles_startpage)
+            return [];
         $tiles = self::STATIC_TILES();
         $tiles = array_merge($tiles, self::SUMA_TILES());
         return $tiles;
diff --git a/metager/app/SearchSettings.php b/metager/app/SearchSettings.php
index 1bd7ef1ad..43086cc01 100644
--- a/metager/app/SearchSettings.php
+++ b/metager/app/SearchSettings.php
@@ -30,6 +30,8 @@ class SearchSettings
     public $enableQuotes = true;
     /** @var bool */
     public $self_advertisements;
+    /** @var bool */
+    public $tiles_startpage;
     /** @var string */
     public $suggestions = "bing";
     public $external_image_search = "metager";
@@ -75,6 +77,9 @@ class SearchSettings
         $this->self_advertisements = $this->getSettingValue("self_advertisements", true);
         $this->self_advertisements = $this->self_advertisements !== "off" ? true : false;
 
+        $this->tiles_startpage = $this->getSettingValue("tiles_startpage", true);
+        $this->tiles_startpage = $this->tiles_startpage !== "off" ? true : false;
+
         $suggestions = $this->getSettingValue("suggestions", "bing");
         if ($suggestions === "off") {
             $this->suggestions = "off";
diff --git a/metager/lang/de/settings.php b/metager/lang/de/settings.php
index 46d875fb9..d8a7e0a8c 100644
--- a/metager/lang/de/settings.php
+++ b/metager/lang/de/settings.php
@@ -88,4 +88,7 @@ return [
     'self_advertisements' => [
         'label' => "Subtile Werbung für unseren eigenen Service",
     ],
+    'tiles_startpage' => [
+        'label' => "Zeige Kacheln auf der Startseite",
+    ],
 ];
diff --git a/metager/lang/en/settings.php b/metager/lang/en/settings.php
index 5f8aaea50..ec48e3f69 100644
--- a/metager/lang/en/settings.php
+++ b/metager/lang/en/settings.php
@@ -37,6 +37,9 @@ return [
     'self_advertisements' => [
         "label" => "Subtle advertisements for our own service",
     ],
+    'tiles_startpage' => [
+        'label' => "Show tiles on the startpage",
+    ],
     'system' => 'System Default',
     'dark' => 'Dark',
     'light' => 'Light',
diff --git a/metager/resources/js/startpage/tiles.js b/metager/resources/js/startpage/tiles.js
index e96d12b9d..9838eb2dd 100644
--- a/metager/resources/js/startpage/tiles.js
+++ b/metager/resources/js/startpage/tiles.js
@@ -49,7 +49,7 @@
         let native_tile_count = getRegularTileCount();
         let min_advertisements = 2;
 
-        let tile_width = parseFloat(window.getComputedStyle(document.querySelector("#tiles > a")).width.replace("px", ""));
+        let tile_width = parseFloat(window.getComputedStyle(document.querySelector("#tiles")).getPropertyValue("--tile-width").replace("px", ""));
         let tile_gap = parseFloat(window.getComputedStyle(document.querySelector("#tiles"))["column-gap"].replace("px", ""));
         let client_width = document.querySelector("html").clientWidth;
         let client_height = document.querySelector("html").clientHeight;
diff --git a/metager/resources/less/metager/pages/startpage/tiles.less b/metager/resources/less/metager/pages/startpage/tiles.less
index 4c0fb83ab..61bd30fbb 100644
--- a/metager/resources/less/metager/pages/startpage/tiles.less
+++ b/metager/resources/less/metager/pages/startpage/tiles.less
@@ -8,6 +8,7 @@ div#tiles-container {
         flex-grow: 0;
         width: 100%;
         @tile_width: 115px;
+        --tile-width: @tile_width; // Variable is used by JS
         @tile_gap: 16px;
 
         @nine_row_width: calc(calc(9 * @tile_width) + calc(8 * @tile_gap));
diff --git a/metager/resources/views/settings/index.blade.php b/metager/resources/views/settings/index.blade.php
index bc17de0b7..c361b8bb3 100644
--- a/metager/resources/views/settings/index.blade.php
+++ b/metager/resources/views/settings/index.blade.php
@@ -225,6 +225,16 @@
                             @lang('settings.suggestions.on')</option>
                     </select>
                 </div>
+                <div class="form-group">
+                    <label for="tiles_startpage">@lang('settings.tiles_startpage.label')</label>
+                    <select name="tiles_startpage" id="tiles_startpage" class="form-control">
+                        <option value="off"
+                            {{ app(App\SearchSettings::class)->tiles_startpage === false ? 'disabled selected' : '' }}>
+                            @lang('settings.suggestions.off')</option>
+                        <option value="on" {{ app(App\SearchSettings::class)->tiles_startpage === true ? 'disabled selected' : '' }}>
+                            @lang('settings.suggestions.on')</option>
+                    </select>
+                </div>
                 <div class="form-group">
                     <label for="dm">@lang('settings.darkmode')</label>
                     <select name="dm" id="dm" class="form-control">
-- 
GitLab