Преглед изворни кода

Automatic simplification of layout for many feeds (#4357)

* Refactor OPML export categories
Simplify code to comply with types hints.
And renamed a property to plural.

* Automatic simplification of layout for many feeds
New advanced property to automatically simplify the layout when there are many (1k+)  feeds so that FreshRSS works out of the box with 20k+ feeds scenarios https://github.com/FreshRSS/FreshRSS/pull/4347

Merge https://github.com/FreshRSS/FreshRSS/pull/4356 first.
Alexandre Alapetite пре 3 година
родитељ
комит
0cde4e898f
3 измењених фајлова са 13 додато и 3 уклоњено
  1. 1 0
      app/Models/UserConfiguration.php
  2. 10 3
      app/layout/aside_feed.phtml
  3. 2 0
      config-user.default.php

+ 1 - 0
app/Models/UserConfiguration.php

@@ -40,6 +40,7 @@
  * @property bool $show_fav_unread
  * @property bool $show_favicons
  * @property bool $icons_as_emojis
+ * @property int $simplify_over_n_feeds
  * @property bool $show_nav_buttons
  * @property string $sort_order
  * @property array<string,array<string>> $sharing

+ 10 - 3
app/layout/aside_feed.phtml

@@ -71,6 +71,11 @@
 		</li>
 
 		<?php
+			$nbFeedsTotal = 0;
+			foreach ($this->categories as $cat) {
+				$nbFeedsTotal += $cat->nbFeeds();
+			}
+
 			foreach ($this->categories as $cat):
 				$feeds = $cat->feeds();
 				$position = $cat->attributes('position');
@@ -95,12 +100,14 @@
 ?>
 <li id="f_<?= $feed->id() ?>" class="item feed<?= $f_active ? ' active' : '', $feed->mute() ? ' mute' : '' ?><?=
 	$feed->inError() ? ' error' : '' ?><?= $feed->nbEntries() <= 0 ? ' empty' : ''
-	?>" data-unread="<?= $feed->nbNotRead() ?>" data-priority="<?= $feed->priority() ?>">
-	<div class="dropdown no-mobile">
+	?>" data-unread="<?= $feed->nbNotRead() ?>" data-priority="<?= $feed->priority() ?>"><?php
+		if ($f_active || $nbFeedsTotal < FreshRSS_Context::$user_conf->simplify_over_n_feeds):
+	?><div class="dropdown no-mobile">
 		<div class="dropdown-target"></div><a class="dropdown-toggle" data-fweb="<?= $feed->website() ?>"><?= _i('configure') ?></a><?php /* feed_config_template */ ?>
 	</div>
 	<?php
-		if (FreshRSS_Context::$user_conf->show_favicons): ?><img class="favicon" src="<?= $feed->favicon() ?>" alt="✇" loading="lazy" /><?php endif;
+			if (FreshRSS_Context::$user_conf->show_favicons) { ?><img class="favicon" src="<?= $feed->favicon() ?>" alt="✇" loading="lazy" /><?php }
+		endif;
 	?><a class="item-title" data-unread="<?= format_number($feed->nbNotRead()) ?>" href="<?=
 		_url('index', $actual_view, 'get', 'f_' . $feed->id()) . $state_filter_manual ?>"><?= $feed->name() ?></a></li>
 <?php

+ 2 - 0
config-user.default.php

@@ -86,6 +86,8 @@ return array (
 	# Disabling favicons and using emojis instead of icons improves performance for users with many feeds
 	'show_favicons' => true,
 	'icons_as_emojis' => false,
+	# Hide the dropdown configuration menu and favicon in the aside list in case of many feeds, for UI performance
+	'simplify_over_n_feeds' => 1000,
 
 	'topline_read' => true,
 	'topline_favorite' => true,