You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2014/01/23 18:30:47 UTC
[5/9] git commit: [#4257] Fixed page back to start, and more refactors
[#4257] Fixed page back to start, and more refactors
Signed-off-by: Cory Johns <cj...@slashdotmedia.com>
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/3d9ff04e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/3d9ff04e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/3d9ff04e
Branch: refs/heads/master
Commit: 3d9ff04e51d3a5ef3e1a4871954b3253f00a5b70
Parents: f1f4ff4
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Sun Jan 19 01:14:51 2014 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Thu Jan 23 17:28:04 2014 +0000
----------------------------------------------------------------------
.../forgeactivity/nf/activity/js/activity.js | 66 ++++++++++++--------
1 file changed, 41 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/3d9ff04e/ForgeActivity/forgeactivity/nf/activity/js/activity.js
----------------------------------------------------------------------
diff --git a/ForgeActivity/forgeactivity/nf/activity/js/activity.js b/ForgeActivity/forgeactivity/nf/activity/js/activity.js
index a1313c6..48b699f 100644
--- a/ForgeActivity/forgeactivity/nf/activity/js/activity.js
+++ b/ForgeActivity/forgeactivity/nf/activity/js/activity.js
@@ -18,6 +18,7 @@
*/
ASOptions = {
+ maxPages: 3,
maintainScrollHistory: true,
usePjax: true,
useHash: true,
@@ -27,6 +28,17 @@ ASOptions = {
}
$(function() {
+ if (!$('.timeline li').length) {
+ return; // no timeline, no paging
+ }
+
+ $.expr[':']['timeline-page'] = $.expr.createPseudo(function(page) {
+ // Select timeline elements by their page. NB: only works on activity LIs.
+ return function(elem) {
+ return $(elem).data('page') == page;
+ }
+ });
+
function detectFeatures() {
var hasAPI = window.history && window.history.pushState && window.history.replaceState;
var iOS4 = navigator.userAgent.match(/iP(od|one|ad).+\bOS\s+[1-4]|WebApps\/.+CFNetwork/);
@@ -72,7 +84,6 @@ $(function() {
var elemAdjustment = newTop - oldTop;
var viewportAdjustment = scrollTop - oldScrollTop;
$window.scrollTop(scrollTop + elemAdjustment - viewportAdjustment);
- //console.log('restoreSP', oldTop, newTop, elemAdjustment, viewportAdjustment, scrollTop, $window.scrollTop());
$(window).trigger('scroll');
}
@@ -125,36 +136,35 @@ $(function() {
}
function pageOut(newer) {
- // Remove a single page of either newer or older content.
+ // Remove newest or oldest page to keep memory usage in check.
var $timeline = $('.timeline li');
- var limit = $('.timeline').data('limit');
- var range = newer ? [0, limit] : [-limit, undefined];
- $timeline.slice(range[0], range[1]).remove();
+ var firstPage = $timeline.first().data('page');
+ var lastPage = $timeline.last().data('page');
+ var numPages = lastPage - firstPage + 1;
+ if (numPages <= ASOptions.maxPages) {
+ return;
+ }
+ var pageToRemove = newer ? firstPage : lastPage;
+ $('.timeline li:timeline-page('+pageToRemove+')').remove();
$('.no-more.'+(newer ? 'newer' : 'older')).remove();
}
function pageIn(newer, url) {
// Load a single page of either newer or older content from the URL.
- // If the added page causes too many to be on screen, calls pageOut
+ // Then calls pageOut to ensure that not too many are loaded at once,
// to keep memory usage in check. Also uses save/restoreScrollPosition
// to try to keep the same content in view at the same place.
$.get(url, function(html) {
var $html = $(html);
var $timeline = $('.timeline');
+ var newPage = $html.data('page');
var limit = $('.timeline').data('limit');
saveScrollPosition();
- if ($html.length < limit) {
- var method = newer ? 'before' : 'after';
- var cls = newer ? 'newer' : 'older';
- $timeline[method]('<div class="no-more '+cls+'">No more activities</div>');
- }
- var method = newer ? 'prepend' : 'append';
- $timeline[method]($html);
- var firstPage = $('.timeline li:first').data('page');
- var lastPage = $('.timeline li:last').data('page');
- if (lastPage - firstPage >= 3) {
- pageOut(!newer);
+ if ($html.length < limit || newPage == 0) {
+ makeNoMore(newer);
}
+ $timeline[newer ? 'prepend' : 'append']($html);
+ pageOut(!newer);
if (ASOptions.useShowMore) {
// this has to be here instead of showMoreLink handler to
// ensure that scroll changes between added / removed content
@@ -168,6 +178,13 @@ $(function() {
});
}
+ function makeNoMore(newer) {
+ var $timeline = $('.timeline');
+ var method = newer ? 'before' : 'after';
+ var cls = newer ? 'newer' : 'older';
+ $timeline[method]('<div class="no-more '+cls+'">No more activities</div>');
+ }
+
function makeShowMoreLink(newer, targetPage, limit) {
var $link = $('<a class="show-more">Show More</a>');
$link.addClass(newer ? 'newer' : 'older');
@@ -176,32 +193,31 @@ $(function() {
event.preventDefault();
pageIn(newer, this.href);
});
- return $link;
+ $('.timeline')[newer ? 'before' : 'after']($link);
}
function updateShowMore() {
// Update the state of the Show More links when using "Show More"-style
// advanced paging.
- var $timeline = $('.timeline');
- if (!$timeline.length) {
- return;
- }
var limit = $('.timeline').data('limit');
var firstPage = $('.timeline li:first').data('page');
var lastPage = $('.timeline li:last').data('page');
- var noMoreNewer = firstPage == 0 || $('.no-more.newer').length;
+ var noMoreNewer = $('.no-more.newer').length;
var noMoreOlder = $('.no-more.older').length;
$('.show-more').remove(); // TODO: could update HREFs instead of always re-creating links
if (!noMoreNewer) {
- $timeline.before(makeShowMoreLink(true, firstPage-1, limit));
+ makeShowMoreLink(true, firstPage-1, limit);
}
if (!noMoreOlder) {
- $timeline.after(makeShowMoreLink(false, lastPage+1, limit));
+ makeShowMoreLink(false, lastPage+1, limit);
}
}
function enableShowMore() {
$('.page_list').remove();
+ if ($('.timeline li:first').data('page') == 0) {
+ makeNoMore(true);
+ }
updateShowMore();
}