Results JS resort : properly handle results with same ranking value.

pull/127/merge
luccioman 8 years ago
parent 57a1007772
commit ad61a3afed

@ -6,8 +6,8 @@
animation: 1s 1 forwards showSearchResult; animation: 1s 1 forwards showSearchResult;
} }
/* Apply to all freshly fetched search results gone outside the current page */ /* Apply to all search results gone outside the current page because of a new one freshly inserted */
.searchresults.earlierpage.fresh, .searchresults.laterpage.fresh { .searchresults.earlierpage:not(.hidden), .searchresults.laterpage:not(.hidden) {
/* Animate when a result goes out of the currently displayed results page */ /* Animate when a result goes out of the currently displayed results page */
animation: 1s 1 forwards hideSearchResult; animation: 1s 1 forwards hideSearchResult;
} }

@ -21,7 +21,7 @@
* See related style sheet env/yacysort.css */ * See related style sheet env/yacysort.css */
var itemCount = 0; var itemCount = 0;
var highestRanking = Infinity; var currentPageNumber = 0;
/* Set to true to enable browser console log traces */ /* Set to true to enable browser console log traces */
var logEnabled = false; var logEnabled = false;
@ -30,10 +30,12 @@ var logEnabled = false;
var feedRunning = true; var feedRunning = true;
/** /**
* Refresh the results page, checking each result CSS class depending on its position and ranking. * Refresh the results page, checking and eventually updating each result CSS class depending on its position.
* @param isPageChange when true this refresh is done in response to a page change * Important : resorting based on ranking must have been done before.
* @param {Boolean} isPageChange when true this refresh is done in response to a page change
* @param {Number} pageNumber the page number to display
*/ */
var displayPage = function(isPageChange) { var displayPage = function(isPageChange, pageNumber) {
var offset = 1; var offset = 1;
var totalcount = 0; var totalcount = 0;
var itemscount = 0; var itemscount = 0;
@ -47,13 +49,14 @@ var displayPage = function(isPageChange) {
item.removeClass("fresh"); item.removeClass("fresh");
} }
totalcount++; totalcount++;
var earlierPage = parseFloat(item.data("ranking")) > highestRanking; var earlierPage = i < (pageNumber * requestedResults);
// Apply the "earlierpage" class IFF the item is from an earlier page. // Apply the "earlierpage" class IFF the item is from an earlier page.
item.toggleClass("earlierpage", earlierPage); item.toggleClass("earlierpage", earlierPage);
if (earlierPage) { if (earlierPage) {
item.removeClass("currentpage"); item.removeClass("currentpage");
if(!isFresh) { if(isPageChange) {
/* Use the "hidden" CSS class when this item has not been recently inserted to hide it without unnecessary animation */ /* Use the "hidden" CSS class when changing page to hide it without unnecessary animation */
item.addClass("hidden"); item.addClass("hidden");
} }
offset++; offset++;
@ -64,8 +67,8 @@ var displayPage = function(isPageChange) {
// If we now have too many results, hide the lowest-ranking ones. // If we now have too many results, hide the lowest-ranking ones.
if (laterPage) { if (laterPage) {
item.removeClass("currentpage"); item.removeClass("currentpage");
if(!isFresh) { if(isPageChange) {
/* Use the "hidden" CSS class when this item has not been recently inserted to hide it without unnecessary animation */ /* Use the "hidden" CSS class when changing page to hide it without unnecessary animation */
item.addClass("hidden"); item.addClass("hidden");
} }
} else { } else {
@ -95,33 +98,26 @@ var displayPage = function(isPageChange) {
} }
}; };
// pageNumber starts at 0. /**
* Update the current page to the requested page number
* @param {Number} pageNumber the requested page number (starts at 0)
*/
var numberedPage = function(pageNumber) { var numberedPage = function(pageNumber) {
// Find all items. // Find all items.
var allItems = $("#resultscontainer").find(".searchresults"); var allItems = $("#resultscontainer").find(".searchresults");
var itemNumber = pageNumber * requestedResults; // Check if the pageNumber is too high before updating the currentPage
var checkedPageNumber;
// Check if the item number is too high. if(allItems.length > 0) {
while ( allItems.length - 1 < itemNumber) { checkedPageNumber = Math.min(pageNumber, Math.floor(allItems.length / requestedResults));
itemNumber = itemNumber - requestedResults; } else {
} checkedPageNumber = 0;
// If the beginning of results is requested, set highestRanking to Infinity.
if ( itemNumber <= 0 ) {
highestRanking = Infinity;
}
else {
var item = allItems.get(itemNumber);
highestRanking = parseFloat($(item).data("ranking"));
}
if(logEnabled) {
console.log("highestRanking is now " + highestRanking);
} }
var pageChange = currentPageNumber != checkedPageNumber;
currentPageNumber = checkedPageNumber;
// Update the display to show the new page. // Update the display to show the new page.
displayPage(true); displayPage(pageChange, checkedPageNumber);
}; };
var processSidebarNavProtocols = function(navProtocolsOld, navProtocolsNew) { var processSidebarNavProtocols = function(navProtocolsOld, navProtocolsNew) {
@ -168,8 +164,10 @@ var processSidebarNavProtocols = function(navProtocolsOld, navProtocolsNew) {
var processSidebarMenuGroup = function(listOld, listNew) { var processSidebarMenuGroup = function(listOld, listNew) {
if ( $(listNew).length === 1) { if ( $(listNew).length === 1) {
if ( $(listOld).length < 1) { if ( $(listOld).length < 1) {
console.warn("listOld doesn't exist, so can't replace it with listNew."); if(logEnabled) {
return; console.warn("listOld doesn't exist, so can't replace it with listNew.");
}
return;
} }
var childrenOld = $(listOld).children("li"); var childrenOld = $(listOld).children("li");
@ -365,7 +363,7 @@ var processItem = function(data) {
}); });
} }
displayPage(); displayPage(false, currentPageNumber);
if (itemCount === 0) { if (itemCount === 0) {
updateSidebar(); updateSidebar();

Loading…
Cancel
Save