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

Several position problems, in particular in the global view

Multiple small bugs in global and reader views.
Related to these old issues:
https://github.com/FreshRSS/FreshRSS/issues/634
https://github.com/FreshRSS/FreshRSS/issues/275
Alexandre Alapetite 10 лет назад
Родитель
Сommit
362dbad0b8
3 измененных файлов с 16 добавлено и 25 удалено
  1. 2 2
      app/layout/layout.phtml
  2. 3 4
      app/views/helpers/javascript_vars.phtml
  3. 11 19
      p/scripts/main.js

+ 2 - 2
app/layout/layout.phtml

@@ -5,10 +5,10 @@
 		<meta name="viewport" content="initial-scale=1.0" />
 		<?php echo self::headTitle(); ?>
 		<?php echo self::headStyle(); ?>
-		<?php echo self::headScript(); ?>
 		<script>//<![CDATA[
 <?php $this->renderHelper('javascript_vars'); ?>
 		//]]></script>
+		<?php echo self::headScript(); ?>
 <?php
 	$url_base = Minz_Request::currentRequest();
 	if (FreshRSS_Context::$next_id !== '') {
@@ -42,7 +42,7 @@
 		<meta name="robots" content="noindex,nofollow" />
 <?php } ?>
 	</head>
-	<body class="<?php echo Minz_Request::param('output', 'normal'); ?>">
+	<body class="<?php echo Minz_Request::actionName(); ?>">
 <?php $this->partial('header'); ?>
 
 <div id="global">

+ 3 - 4
app/views/helpers/javascript_vars.phtml

@@ -4,8 +4,7 @@
 $mark = FreshRSS_Context::$user_conf->mark_when;
 $mail = Minz_Session::param('mail', false);
 $auto_actualize = Minz_Session::param('actualize_feeds', false);
-$hide_posts = (FreshRSS_Context::$user_conf->display_posts ||
-               Minz_Request::param('output') === 'reader');
+$hide_posts = !(FreshRSS_Context::$user_conf->display_posts || Minz_Request::actionName() === 'reader');
 $s = FreshRSS_Context::$user_conf->shortcuts;
 
 $url_login = Minz_Url::display(array(
@@ -19,7 +18,7 @@ $url_logout = Minz_Url::display(array(
 
 echo 'var context={',
 	'auto_remove_article:', FreshRSS_Context::isAutoRemoveAvailable() ? 'true' : 'false', ',',
-	'hide_posts:', $hide_posts ? 'false' : 'true', ',',
+	'hide_posts:', $hide_posts ? 'true' : 'false', ',',
 	'display_order:"', Minz_Request::param('order', FreshRSS_Context::$user_conf->sort_order), '",',
 	'auto_mark_article:', $mark['article'] ? 'true' : 'false', ',',
 	'auto_mark_site:', $mark['site'] ? 'true' : 'false', ',',
@@ -31,7 +30,7 @@ echo 'var context={',
 	'html5_notif_timeout:', FreshRSS_Context::$user_conf->html5_notif_timeout, ',',
 	'auth_type:"', FreshRSS_Context::$system_conf->auth_type, '",',
 	'current_user_mail:', $mail ? ('"' . $mail . '"') : 'null', ',',
-	'current_view:"', Minz_Request::param('output', 'normal'), '"',
+	'current_view:"', Minz_Request::actionName(), '"',
 "},\n";
 
 echo 'shortcuts={',

+ 11 - 19
p/scripts/main.js

@@ -246,18 +246,18 @@ function toggleContent(new_active, old_active) {
 
 	var box_to_move = "html,body",
 		relative_move = false;
-	if (context['current_view'] == 'global') {
+	if (context['current_view'] === 'global') {
 		box_to_move = "#panel";
 		relative_move = true;
 	}
 
 	if (context['sticky_post']) {
 		var prev_article = new_active.prevAll('.flux'),
-			new_pos = new_active.position().top,
+			new_pos = new_active.offset().top,
 			old_scroll = $(box_to_move).scrollTop();
 
-		if (prev_article.length > 0 && new_pos - prev_article.position().top <= 150) {
-			new_pos = prev_article.position().top;
+		if (prev_article.length > 0 && new_pos - prev_article.offset().top <= 150) {
+			new_pos = prev_article.offset().top;
 		}
 
 		if (context['hide_posts']) {
@@ -451,11 +451,8 @@ function auto_share(key) {
 	}
 }
 
-function inMarkViewport(flux, box_to_follow, relative_follow) {
-	var top = flux.position().top;
-	if (relative_follow) {
-		top += box_to_follow.scrollTop();
-	}
+function inMarkViewport(flux, box_to_follow) {
+	var top = flux.offset().top;
 	var height = flux.height(),
 		begin = top + 3 * height / 4,
 		bot = Math.min(begin + 75, top + height),
@@ -466,17 +463,15 @@ function inMarkViewport(flux, box_to_follow, relative_follow) {
 }
 
 function init_posts() {
-	var box_to_follow = $(window),
-		relative_follow = false;
-	if (context['current_view'] == 'global') {
+	var box_to_follow = $(window);
+	if (context['current_view'] === 'global') {
 		box_to_follow = $("#panel");
-		relative_follow = true;
 	}
 
 	if (context['auto_mark_scroll']) {
 		box_to_follow.scroll(function () {
 			$('.not_read:visible').each(function () {
-				if ($(this).children(".flux_content").is(':visible') && inMarkViewport($(this), box_to_follow, relative_follow)) {
+				if ($(this).children(".flux_content").is(':visible') && inMarkViewport($(this), box_to_follow)) {
 					mark_read($(this), true);
 				}
 			});
@@ -490,10 +485,7 @@ function init_posts() {
 				return;
 			}
 			var boxBot = box_to_follow.scrollTop() + box_to_follow.height(),
-				load_more_top = load_more.position().top;
-			if (relative_follow) {
-				load_more_top += box_to_follow.scrollTop();
-			}
+				load_more_top = load_more.offset().top;
 			if (boxBot >= load_more_top) {
 				load_more_posts();
 			}
@@ -765,7 +757,7 @@ function init_nav_entries() {
 	$nav_entries.find('.up').click(function () {
 		var active_item = $(".flux.current"),
 			windowTop = $(window).scrollTop(),
-			item_top = active_item.position().top;
+			item_top = active_item.offset().top;
 
 		if (windowTop > item_top) {
 			$("html,body").scrollTop(item_top);