Просмотр исходного кода

Changements de vues

Correction d'un bug JavaScript récent dans la vue globale.
Corrections de nombreux bugs lors des changements de vue
https://github.com/marienfressinaud/FreshRSS/issues/346 et amélioration
des performances pour la génération des URL en évitant beaucoup d'appels
de fonctions https://github.com/marienfressinaud/FreshRSS/pull/362
De plus, dans les URL, is_favorite et is_read ont maintenant une valeur
par défaut de 1, ce qui évite de les écrire dans beaucoup de cas.
Suppression des espaces blancs de la sortie HTML au niveau de quelques
boucles critiques.
Alexandre Alapetite 12 лет назад
Родитель
Сommit
69f7bce75b

+ 8 - 5
app/Controllers/entryController.php

@@ -10,6 +10,11 @@ class FreshRSS_entry_Controller extends Minz_ActionController {
 		}
 
 		$this->params = array ();
+		$output = Minz_Request::param('output', '');
+		if (($output != '') && ($this->conf->view_mode !== $output)) {
+			$this->params['output'] = $output;
+		}
+
 		$this->redirect = false;
 		$ajax = Minz_Request::param ('ajax');
 		if ($ajax) {
@@ -34,13 +39,10 @@ class FreshRSS_entry_Controller extends Minz_ActionController {
 		$this->redirect = true;
 
 		$id = Minz_Request::param ('id');
-		$is_read = Minz_Request::param ('is_read');
 		$get = Minz_Request::param ('get');
 		$nextGet = Minz_Request::param ('nextGet', $get); 
 		$idMax = Minz_Request::param ('idMax', 0);
 
-		$is_read = (bool)$is_read;
-
 		$entryDAO = new FreshRSS_EntryDAO ();
 		if ($id == false) {
 			if (!$get) {
@@ -63,7 +65,7 @@ class FreshRSS_entry_Controller extends Minz_ActionController {
 						break;
 				}
 				if ($nextGet !== 'a') {
-					$this->params = array ('get' => $nextGet);
+					$this->params['get'] = $nextGet;
 				}
 			}
 
@@ -73,6 +75,7 @@ class FreshRSS_entry_Controller extends Minz_ActionController {
 			);
 			Minz_Session::_param ('notification', $notif);
 		} else {
+			$is_read = (bool)(Minz_Request::param ('is_read', true));
 			$entryDAO->markRead ($id, $is_read);
 		}
 	}
@@ -83,7 +86,7 @@ class FreshRSS_entry_Controller extends Minz_ActionController {
 		$id = Minz_Request::param ('id');
 		if ($id) {
 			$entryDAO = new FreshRSS_EntryDAO ();
-			$entryDAO->markFavorite ($id, Minz_Request::param ('is_favorite'));
+			$entryDAO->markFavorite ($id, (bool)(Minz_Request::param ('is_favorite', true)));
 		}
 	}
 

+ 1 - 1
app/i18n/en.php

@@ -161,7 +161,7 @@ return array (
 
 	'current_user'			=> 'Current user',
 	'default_user'			=> 'Username of the default user <small>(maximum 16 alphanumeric characters)</small>',
-	'password_form'			=>'Password<br /><small>(for the Web-form login method)</small>',
+	'password_form'			=> 'Password<br /><small>(for the Web-form login method)</small>',
 	'persona_connection_email'	=> 'Login mail address<br /><small>(for <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
 	'allow_anonymous'		=> 'Allow anonymous reading of the articles of the default user (%s)',
 	'auth_token'			=> 'Authentication token',

+ 1 - 1
app/i18n/fr.php

@@ -160,7 +160,7 @@ return array (
 	'think_to_add'			=> '<a href="./?c=configure&amp;a=feed">Pensez à en ajouter !</a>',
 
 	'current_user'			=> 'Utilisateur actuel',
-	'password_form'			=>'Mot de passe<br /><small>(pour connexion par formulaire)</small>',
+	'password_form'			=> 'Mot de passe<br /><small>(pour connexion par formulaire)</small>',
 	'default_user'			=> 'Nom de l’utilisateur par défaut <small>(16 caractères alphanumériques maximum)</small>',
 	'persona_connection_email'	=> 'Adresse courriel de connexion<br /><small>(pour <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
 	'allow_anonymous'		=> 'Autoriser la lecture anonyme des articles de l’utilisateur par défaut (%s)',

+ 38 - 35
app/layout/aside_flux.phtml

@@ -13,15 +13,15 @@
 		<li><a href="<?php echo _url ('index', 'about'); ?>"><?php echo Minz_Translate::t ('about_freshrss'); ?></a></li>
 		<?php } ?>
 
-		<?php 
-			$output = array();
+		<?php
+			$arUrl = array('c' => 'index', 'a' => 'index', 'params' => array());
 			if ($this->conf->view_mode !== Minz_Request::param('output', 'normal')) {
-				$output = array('output', 'normal');
+				$arUrl['params']['output'] = 'normal';
 			}
 		?>
 		<li>
 			<div class="category all">
-				<a data-unread="<?php echo $this->nb_not_read; ?>" class="btn<?php echo $this->get_c == 'a' ? ' active' : ''; ?>" href="<?php echo call_user_func_array('_url', array_merge(array('index', 'index'), $output)); ?>">
+				<a data-unread="<?php echo $this->nb_not_read; ?>" class="btn<?php echo $this->get_c == 'a' ? ' active' : ''; ?>" href="<?php echo Minz_Url::display($arUrl); ?>">
 					<?php echo FreshRSS_Themes::icon('all'); ?>
 					<?php echo Minz_Translate::t ('all_feeds'); ?>
 				</a>
@@ -30,43 +30,46 @@
 
 		<li>
 			<div class="category favorites">
-				<a data-unread="<?php echo $this->nb_favorites['unread']; ?>" class="btn<?php echo $this->get_c == 's' ? ' active' : ''; ?>" href="<?php echo call_user_func_array('_url', array_merge(array('index', 'index', 'get', 's'), $output)); ?>">
+				<a data-unread="<?php echo $this->nb_favorites['unread']; ?>" class="btn<?php echo $this->get_c == 's' ? ' active' : ''; ?>" href="<?php $arUrl['params']['get'] = 's'; echo Minz_Url::display($arUrl); ?>">
 					<?php echo FreshRSS_Themes::icon('bookmark'); ?>
 					<?php echo Minz_Translate::t ('favorite_feeds', $this->nb_favorites['all']); ?>
 				</a>
 			</div>
 		</li>
 
-		<?php foreach ($this->cat_aside as $cat) { ?>
-		<?php $feeds = $cat->feeds (); ?>
-		<?php if (!empty ($feeds)) { ?>
-		<li>
-			<?php $c_active = false; if ($this->get_c == $cat->id ()) { $c_active = true; } ?>
-			<div class="category stick<?php echo $c_active ? ' active' : ''; ?>">
-				<a data-unread="<?php echo $cat->nbNotRead (); ?>" class="btn<?php echo $c_active ? ' active' : ''; ?>" href="<?php echo call_user_func_array('_url', array_merge(array('index', 'index', 'get', 'c_' . $cat->id ()), $output)); ?>"><?php echo $cat->name (); ?></a>
-				<a class="btn dropdown-toggle" href="#"><?php echo FreshRSS_Themes::icon($c_active ? 'up' : 'down'); ?></a>
-			</div>
-
-			<ul class="feeds<?php echo $c_active ? ' active' : ''; ?>">
-				<?php foreach ($feeds as $feed) {
-						$feed_id = $feed->id (); $nbEntries = $feed->nbEntries ();
-						$f_active = ($this->get_f == $feed_id);
-				?>
-				<li id="f_<?php echo $feed_id; ?>" class="item<?php echo $f_active ? ' active' : ''; ?><?php echo $feed->inError () ? ' error' : ''; ?><?php echo $nbEntries == 0 ? ' empty' : ''; ?>">
-					<div class="dropdown">
-						<div class="dropdown-target"></div>
-						<a class="dropdown-toggle" data-fweb="<?php echo $feed->website (); ?>"><?php echo FreshRSS_Themes::icon('configure'); ?></a>
-<?php /* feed_config_template */ ?>
-					</div>
-					<img class="favicon" src="<?php echo $feed->favicon (); ?>" alt="✇" />
-					<a class="feed" data-unread="<?php echo $feed->nbNotRead (); ?>" data-priority="<?php echo $feed->priority (); ?>" href="<?php echo call_user_func_array('_url', array_merge(array('index', 'index', 'get', 'f_' . $feed_id), $output)); ?>"><?php echo $feed->name(); ?></a>
-				</li>
-				<?php } ?>
-			</ul>
-		</li>
-		<?php } } ?>
+		<?php
+		foreach ($this->cat_aside as $cat) {
+			$feeds = $cat->feeds ();
+			if (!empty ($feeds)) {
+				?><li><?php
+				$c_active = false;
+				if ($this->get_c == $cat->id ()) {
+					$c_active = true;
+				}
+				?><div class="category stick<?php echo $c_active ? ' active' : ''; ?>"><?php
+					?><a data-unread="<?php echo $cat->nbNotRead (); ?>" class="btn<?php echo $c_active ? ' active' : ''; ?>" href="<?php $arUrl['params']['get'] = 'c_' . $cat->id(); echo Minz_Url::display($arUrl); ?>"><?php echo $cat->name (); ?></a><?php
+					?><a class="btn dropdown-toggle" href="#"><?php echo FreshRSS_Themes::icon($c_active ? 'up' : 'down'); ?></a><?php
+				?></div><?php
+				?><ul class="feeds<?php echo $c_active ? ' active' : ''; ?>"><?php
+				foreach ($feeds as $feed) {
+					$feed_id = $feed->id ();
+					$nbEntries = $feed->nbEntries ();
+					$f_active = ($this->get_f == $feed_id);
+					?><li id="f_<?php echo $feed_id; ?>" class="item<?php echo $f_active ? ' active' : ''; ?><?php echo $feed->inError () ? ' error' : ''; ?><?php echo $nbEntries == 0 ? ' empty' : ''; ?>"><?php
+						?><div class="dropdown"><?php
+							?><div class="dropdown-target"></div><?php
+							?><a class="dropdown-toggle" data-fweb="<?php echo $feed->website (); ?>"><?php echo FreshRSS_Themes::icon('configure'); ?></a><?php
+							/* feed_config_template */
+						?></div><?php
+						?> <img class="favicon" src="<?php echo $feed->favicon (); ?>" alt="✇" /> <?php
+						?><a class="feed" data-unread="<?php echo $feed->nbNotRead (); ?>" data-priority="<?php echo $feed->priority (); ?>" href="<?php $arUrl['params']['get'] = 'f_' . $feed_id; echo Minz_Url::display($arUrl); ?>"><?php echo $feed->name(); ?></a><?php
+					?></li><?php
+				}
+				?></ul><?php
+				?></li><?php
+			}
+		} ?>
 	</ul>
-
 	<span class="aside_flux_ender"><!-- For fixed menu --></span>
 </div>
 
@@ -79,7 +82,7 @@
 		<li class="separator"></li>
 		<li class="item"><a href="<?php echo _url ('configure', 'feed', 'id', '!!!!!!'); ?>"><?php echo Minz_Translate::t ('administration'); ?></a></li>
 		<li class="item"><a href="<?php echo _url ('feed', 'actualize', 'id', '!!!!!!'); ?>"><?php echo Minz_Translate::t ('actualize'); ?></a></li>
-		<li class="item"><a href="<?php echo _url ('entry', 'read', 'is_read', 1, 'get', 'f_!!!!!!'); ?>"><?php echo Minz_Translate::t ('mark_read'); ?></a></li>
+		<li class="item"><a href="<?php echo _url ('entry', 'read', 'get', 'f_!!!!!!'); ?>"><?php echo Minz_Translate::t ('mark_read'); ?></a></li>
 		<?php } ?>
 	</ul>
 </script>

+ 7 - 1
app/layout/nav_menu.phtml

@@ -56,7 +56,13 @@
 		}
 		$p = isset($this->entries[0]) ? $this->entries[0] : null;
 		$idMax = $p === null ? '0' : $p->id();
-		$markReadUrl = _url ('entry', 'read', 'is_read', 1, 'get', $get, 'nextGet', $nextGet, 'idMax', $idMax);
+
+		$arUrl = array('c' => 'entry', 'a' => 'read', 'params' => array('get' => $get, 'nextGet' => $nextGet, 'idMax' => $idMax));
+		$output = Minz_Request::param('output', '');
+		if (($output != '') && ($this->conf->view_mode !== $output)) {
+			$arUrl['params']['output'] = $output;
+		}
+		$markReadUrl = Minz_Url::display($arUrl);
 		Minz_Session::_param ('markReadUrl', $markReadUrl);
 	?>
 

+ 1 - 1
app/views/entry/bookmark.phtml

@@ -1,7 +1,7 @@
 <?php
 header('Content-Type: application/json; charset=UTF-8');
 
-if (Minz_Request::param ('is_favorite')) {
+if (Minz_Request::param ('is_favorite', true)) {
 	Minz_Request::_param ('is_favorite', 0);
 } else {
 	Minz_Request::_param ('is_favorite', 1);

+ 1 - 1
app/views/entry/read.phtml

@@ -1,7 +1,7 @@
 <?php
 header('Content-Type: application/json; charset=UTF-8');
 
-if (Minz_Request::param ('is_read')) {
+if (Minz_Request::param ('is_read', true)) {
 	Minz_Request::_param ('is_read', 0);
 } else {
 	Minz_Request::_param ('is_read', 1);

+ 69 - 53
app/views/helpers/view/normal_view.phtml

@@ -37,50 +37,59 @@ if (!empty($this->entries)) {
 	$bottomline_link = $this->conf->bottomline_link;
 ?>
 
-<div id="stream" class="normal<?php echo $hidePosts ? ' hide_posts' : ''; ?>">
-	<?php foreach ($this->entries as $item) { ?>
+<div id="stream" class="normal<?php echo $hidePosts ? ' hide_posts' : ''; ?>"><?php
+	foreach ($this->entries as $item) {
+		if ($display_today && $item->isDay (FreshRSS_Days::TODAY, $this->today)) {
+			?><div class="day" id="day_today"><?php
+				echo Minz_Translate::t ('today');
+				?><span class="date"> — <?php echo timestamptodate (time (), false); ?></span><?php
+				?><span class="name"><?php echo $this->currentName; ?></span><?php
+			?></div><?php
+			$display_today = false;
+		}
+		if ($display_yesterday && $item->isDay (FreshRSS_Days::YESTERDAY, $this->today)) {
+			?><div class="day" id="day_yesterday"><?php
+				echo Minz_Translate::t ('yesterday');
+				?><span class="date"> — <?php echo timestamptodate (time () - 86400, false); ?></span><?php
+				?><span class="name"><?php echo $this->currentName; ?></span><?php
+			?></div><?php
+			$display_yesterday = false;
+		}
+		if ($display_others && $item->isDay (FreshRSS_Days::BEFORE_YESTERDAY, $this->today)) {
+			?><div class="day" id="day_before_yesterday"><?php
+				echo Minz_Translate::t ('before_yesterday');
+				?><span class="name"><?php echo $this->currentName; ?></span><?php
+			?></div><?php
+			$display_others = false;
+		}
 
-	<?php if ($display_today && $item->isDay (FreshRSS_Days::TODAY, $this->today)) { ?>
-	<div class="day" id="day_today">
-		<?php echo Minz_Translate::t ('today'); ?>
-		<span class="date"> — <?php echo timestamptodate (time (), false); ?></span>
-		<span class="name"><?php echo $this->currentName; ?></span>
-	</div>
-	<?php $display_today = false; } ?>
-	<?php if ($display_yesterday && $item->isDay (FreshRSS_Days::YESTERDAY, $this->today)) { ?>
-	<div class="day" id="day_yesterday">
-		<?php echo Minz_Translate::t ('yesterday'); ?>
-		<span class="date"> — <?php echo timestamptodate (time () - 86400, false); ?></span>
-		<span class="name"><?php echo $this->currentName; ?></span>
-	</div>
-	<?php $display_yesterday = false; } ?>
-	<?php if ($display_others && $item->isDay (FreshRSS_Days::BEFORE_YESTERDAY, $this->today)) { ?>
-	<div class="day" id="day_before_yesterday">
-		<?php echo Minz_Translate::t ('before_yesterday'); ?>
-		<span class="name"><?php echo $this->currentName; ?></span>
-	</div>
-	<?php $display_others = false; } ?>
-
-	<div class="flux<?php echo !$item->isRead () ? ' not_read' : ''; ?><?php echo $item->isFavorite () ? ' favorite' : ''; ?>" id="flux_<?php echo $item->id (); ?>">
+	?><div class="flux<?php echo !$item->isRead () ? ' not_read' : ''; ?><?php echo $item->isFavorite () ? ' favorite' : ''; ?>" id="flux_<?php echo $item->id (); ?>">
 		<ul class="horizontal-list flux_header"><?php
 			if ($this->loginOk) {
 				if ($topline_read) {
 					?><li class="item manage"><?php
-						?><a class="read" href="<?php echo _url ('entry', 'read', 'id', $item->id (), 'is_read', $item->isRead () ? 0 : 1); ?>"><?php
+						$arUrl = array('c' => 'entry', 'a' => 'read', 'params' => array('id' => $item->id ()));
+						if ($item->isRead()) {
+							$arUrl['params']['is_read'] = 0;
+						}
+						?><a class="read" href="<?php echo Minz_Url::display($arUrl); ?>"><?php
 							echo FreshRSS_Themes::icon($item->isRead () ? 'read' : 'unread'); ?></a><?php
 					?></li><?php
 				}
 				if ($topline_favorite) {
-					 ?><li class="item manage"><?php
-						?><a class="bookmark" href="<?php echo _url ('entry', 'bookmark', 'id', $item->id (), 'is_favorite', $item->isFavorite () ? 0 : 1); ?>"><?php
+					?><li class="item manage"><?php
+						$arUrl = array('c' => 'entry', 'a' => 'bookmark', 'params' => array('id' => $item->id ()));
+						if ($item->isFavorite()) {
+							$arUrl['params']['is_favorite'] = 0;
+						}
+						?><a class="bookmark" href="<?php echo Minz_Url::display($arUrl); ?>"><?php
 							echo FreshRSS_Themes::icon($item->isFavorite () ? 'starred' : 'non-starred'); ?></a><?php
 					?></li><?php
 				}
 			}
 			$feed = FreshRSS_CategoryDAO::findFeed($this->cat_aside, $item->feed ());	//We most likely already have the feed object in cache
 			if (empty($feed)) $feed = $item->feed (true);
-			?>
-			<li class="item website"><a href="<?php echo _url ('index', 'index', 'get', 'f_' . $feed->id ()); ?>"><img class="favicon" src="<?php echo $feed->favicon (); ?>" alt="✇" /> <span><?php echo $feed->name(); ?></span></a></li>
+			?><li class="item website"><a href="<?php echo _url ('index', 'index', 'get', 'f_' . $feed->id ()); ?>"><img class="favicon" src="<?php echo $feed->favicon (); ?>" alt="✇" /> <span><?php echo $feed->name(); ?></span></a></li>
 			<li class="item title"><a target="_blank" href="<?php echo $item->link (); ?>"><?php echo $item->title (); ?></a></li>
 			<?php if ($topline_date) { ?><li class="item date"><?php echo $item->date (); ?> </li><?php } ?>
 			<?php if ($topline_link) { ?><li class="item link"><a target="_blank" href="<?php echo $item->link (); ?>"><?php echo FreshRSS_Themes::icon('link'); ?></a></li><?php } ?>
@@ -103,24 +112,30 @@ if (!empty($this->entries)) {
 				if ($this->loginOk) {
 					if ($bottomline_read) {
 						?><li class="item manage"><?php
-							?><a class="read" href="<?php echo _url ('entry', 'read', 'id', $item->id (), 'is_read', $item->isRead () ? 0 : 1); ?>"><?php
+							$arUrl = array('c' => 'entry', 'a' => 'read', 'params' => array('id' => $item->id ()));
+							if ($item->isRead()) {
+								$arUrl['params']['is_read'] = 0;
+							}
+							?><a class="read" href="<?php echo Minz_Url::display($arUrl); ?>"><?php
 								echo FreshRSS_Themes::icon($item->isRead () ? 'read' : 'unread'); ?></a><?php
 						?></li><?php
 					}
 					if ($bottomline_favorite) {
 						?><li class="item manage"><?php
-							?><a class="bookmark" href="<?php echo _url ('entry', 'bookmark', 'id', $item->id (), 'is_favorite', $item->isFavorite () ? 0 : 1); ?>"><?php
+							$arUrl = array('c' => 'entry', 'a' => 'bookmark', 'params' => array('id' => $item->id ()));
+							if ($item->isFavorite()) {
+								$arUrl['params']['is_favorite'] = 0;
+							}
+							?><a class="bookmark" href="<?php echo Minz_Url::display($arUrl); ?>"><?php
 								echo FreshRSS_Themes::icon($item->isFavorite () ? 'starred' : 'non-starred'); ?></a><?php
 						?></li><?php
 					}
 				} ?>
-				<li class="item">
-					<?php
+				<li class="item"><?php
 						if ($bottomline_sharing) {
 							$link = urlencode ($item->link ());
 							$title = urlencode ($item->title () . ' · ' . $feed->name ());
-					?>
-					<div class="dropdown">
+					?><div class="dropdown">
 						<div id="dropdown-share-<?php echo $item->id ();?>" class="dropdown-target"></div>
 						<a class="dropdown-toggle" href="#dropdown-share-<?php echo $item->id ();?>">
 							<?php echo FreshRSS_Themes::icon('share'); ?>
@@ -181,29 +196,30 @@ if (!empty($this->entries)) {
 						</ul>
 					</div>
 					<?php } ?>
-				</li>
-				<?php
-					$tags = $bottomline_tags ? $item->tags() : null;
-					if (!empty($tags)) {
-				?>
-				<li class="item">
+				</li><?php
+				$tags = $bottomline_tags ? $item->tags() : null;
+				if (!empty($tags)) {
+				?><li class="item">
 					<div class="dropdown">
 						<div id="dropdown-tags-<?php echo $item->id ();?>" class="dropdown-target"></div>
-						<a class="dropdown-toggle" href="#dropdown-tags-<?php echo $item->id ();?>">
-							<?php echo FreshRSS_Themes::icon('tag'); ?>
-							<?php echo Minz_Translate::t ('related_tags'); ?>
-						</a>
+						<a class="dropdown-toggle" href="#dropdown-tags-<?php echo $item->id ();?>"><?php
+							echo FreshRSS_Themes::icon('tag'), Minz_Translate::t ('related_tags');
+						?></a>
 						<ul class="dropdown-menu">
-							<li class="dropdown-close"><a href="#close">❌</a></li>
-							<?php foreach($tags as $tag) { ?>
-							<li class="item"><a href="<?php echo _url ('index', 'index', 'search', urlencode ('#' . $tag)); ?>"><?php echo $tag; ?></a></li>
-							<?php } ?>
+							<li class="dropdown-close"><a href="#close">❌</a></li><?php
+							foreach($tags as $tag) {
+								?><li class="item"><a href="<?php echo _url ('index', 'index', 'search', urlencode ('#' . $tag)); ?>"><?php echo $tag; ?></a></li><?php
+							} ?>
 						</ul>
 					</div>
-				</li>
-				<?php } ?>
-				<?php if ($bottomline_date) { ?><li class="item date"><?php echo $item->date (); ?> </li><?php } ?>
-				<?php if ($bottomline_link) { ?><li class="item link"><a target="_blank" href="<?php echo $item->link (); ?>"><?php echo FreshRSS_Themes::icon('link'); ?></a></li><?php } ?>
+				</li><?php
+				}
+				if ($bottomline_date) {
+					?><li class="item date"><?php echo $item->date (); ?></li><?php
+				}
+				if ($bottomline_link) {
+					?><li class="item link"><a target="_blank" href="<?php echo $item->link (); ?>"><?php echo FreshRSS_Themes::icon('link'); ?></a></li><?php
+				} ?>
 			</ul>
 		</div>
 	</div>

+ 5 - 2
p/scripts/global_view.js

@@ -50,11 +50,14 @@ function init_global_view() {
 
 	$(".nav_menu #nav_menu_read_all, .nav_menu .toggle_aside").remove();
 
-	init_stream_delegates($("#panel"));
+	init_stream($("#panel"));
 }
 
 function init_all_global_view() {
-	if (!(window.$ && window.init_stream_delegates)) {
+	if (!(window.$ && window.init_stream)) {
+		if (window.console) {
+			console.log('FreshRSS Global view waiting for JS…');
+		}
 		window.setTimeout(init_all_global_view, 50);	//Wait for all js to be loaded
 		return;
 	}