fix #991 improve collapsing navigation

This commit is contained in:
Shinsuke Sugaya 2017-04-13 15:31:33 +09:00
parent 0d124b81d9
commit 65ab1b4db0
7 changed files with 199 additions and 17 deletions

View file

@ -587,6 +587,9 @@ public class FessLabels extends UserMessages {
/** The key of the message: Search */
public static final String LABELS_SEARCH = "{labels.search}";
/** The key of the message: Similar results are displayed. */
public static final String LABELS_similar_doc_result_status = "{labels.similar_doc_result_status}";
/** The key of the message: Results <b>{2}</b><span class="hidden-phone"> -</span> <b>{3}</b> of <b>{1}</b> for <b>{0}</b> */
public static final String LABELS_search_result_status = "{labels.search_result_status}";

View file

@ -186,6 +186,11 @@ public class QueryResponseList implements List<Map<String, Object>> {
existPrevPage = start > 0;
existNextPage = start < (long) (allPageCount - 1) * (long) pageSize;
currentPageNumber = start / pageSize + 1;
if (existNextPage && size() < pageSize) {
// collapsing
existNextPage = false;
allPageCount = currentPageNumber;
}
currentStartRecordNumber = allRecordCount != 0 ? (currentPageNumber - 1) * pageSize + 1 : 0;
currentEndRecordNumber = (long) currentPageNumber * pageSize;
currentEndRecordNumber = allRecordCount < currentEndRecordNumber ? allRecordCount : currentEndRecordNumber;
@ -203,7 +208,6 @@ public class QueryResponseList implements List<Map<String, Object>> {
for (int i = startPageRangeSize; i <= endPageRangeSize; i++) {
pageNumberList.add(String.valueOf(i));
}
}
@Override

View file

@ -186,6 +186,7 @@ labels.sidebar.placeholder_search=Search...
labels.sidebar.menu=MENU
labels.footer.copyright=&copy;2017 <a href="https://github.com/codelibs">CodeLibs Project</a>.
labels.search=Search
labels.similar_doc_result_status=Similar results are displayed.
labels.search_result_status=Results <b>{2}</b><span class="hidden-phone"> -</span> <b>{3}</b> of <b>{1}</b> for <b>{0}</b>
labels.search_result_time=({0} sec)
labels.prev_page=Prev

View file

@ -186,6 +186,7 @@ labels.sidebar.placeholder_search=Search...
labels.sidebar.menu=MENU
labels.footer.copyright=&copy;2017 <a href="https://github.com/codelibs">CodeLibs Project</a>.
labels.search=Search
labels.similar_doc_result_status=Similar results are displayed.
labels.search_result_status=Results <b>{2}</b><span class="hidden-phone"> -</span> <b>{3}</b> of <b>{1}</b> for <b>{0}</b>
labels.search_result_time=({0} sec)
labels.prev_page=Prev

View file

@ -179,6 +179,7 @@ labels.sidebar.placeholder_search=\u691c\u7d22...
labels.sidebar.menu=\u30e1\u30cb\u30e5\u30fc
labels.footer.copyright=&copy;2017 <a href="https://github.com/codelibs">CodeLibs Project</a>.
labels.search=\u691c\u7d22
labels.similar_doc_result_status=\u985e\u4f3c\u3057\u3066\u3044\u308b\u7d50\u679c\u3092\u8868\u793a\u3057\u3066\u3044\u307e\u3059\u3002
labels.search_result_status=<b>{0}</b> \u306e\u691c\u7d22\u7d50\u679c<span class="br-phone"></span> <b>{1}</b> \u4ef6\u4e2d <b>{2}</b> - <b>{3}</b> \u4ef6\u76ee
labels.search_result_time=({0} \u79d2)
labels.prev_page=\u524d\u3078

View file

@ -11,6 +11,11 @@
<la:message key="labels.search_result_time" arg0="${f:h(execTime)}" />
</c:if>
</p>
<c:if test="${! empty sdh }">
<p>
<la:message key="labels.similar_doc_result_status" />
</p>
</c:if>
</div>
</div>
<c:if test="${partialResults}">

View file

@ -25,7 +25,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
public void test_calculatePageInfo_page0() {
QueryResponseList qrList;
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 0;
}
};
qrList.calculatePageInfo(0, 20);
assertEquals(20, qrList.getPageSize());
assertEquals(1, qrList.getCurrentPageNumber());
@ -40,7 +45,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
public void test_calculatePageInfo_page1() {
QueryResponseList qrList;
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 10;
}
};
qrList.allRecordCount = 10;
qrList.calculatePageInfo(0, 20);
assertEquals(20, qrList.getPageSize());
@ -52,7 +62,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
assertEquals(1, qrList.getCurrentStartRecordNumber());
assertEquals(10, qrList.getCurrentEndRecordNumber());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 20;
}
};
qrList.allRecordCount = 20;
qrList.calculatePageInfo(0, 20);
assertEquals(20, qrList.getPageSize());
@ -64,7 +79,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
assertEquals(1, qrList.getCurrentStartRecordNumber());
assertEquals(20, qrList.getCurrentEndRecordNumber());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 20;
}
};
qrList.allRecordCount = 21;
qrList.calculatePageInfo(0, 20);
assertEquals(20, qrList.getPageSize());
@ -76,7 +96,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
assertEquals(1, qrList.getCurrentStartRecordNumber());
assertEquals(20, qrList.getCurrentEndRecordNumber());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 20;
}
};
qrList.allRecordCount = 40;
qrList.calculatePageInfo(0, 20);
assertEquals(20, qrList.getPageSize());
@ -88,7 +113,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
assertEquals(1, qrList.getCurrentStartRecordNumber());
assertEquals(20, qrList.getCurrentEndRecordNumber());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 20;
}
};
qrList.allRecordCount = 41;
qrList.calculatePageInfo(0, 20);
assertEquals(20, qrList.getPageSize());
@ -104,7 +134,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
public void test_calculatePageInfo_page2() {
QueryResponseList qrList;
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 1;
}
};
qrList.allRecordCount = 21;
qrList.calculatePageInfo(20, 20);
assertEquals(20, qrList.getPageSize());
@ -116,7 +151,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
assertEquals(21, qrList.getCurrentStartRecordNumber());
assertEquals(21, qrList.getCurrentEndRecordNumber());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 20;
}
};
qrList.allRecordCount = 40;
qrList.calculatePageInfo(20, 20);
assertEquals(20, qrList.getPageSize());
@ -128,7 +168,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
assertEquals(21, qrList.getCurrentStartRecordNumber());
assertEquals(40, qrList.getCurrentEndRecordNumber());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 20;
}
};
qrList.allRecordCount = 41;
qrList.calculatePageInfo(20, 20);
assertEquals(20, qrList.getPageSize());
@ -140,7 +185,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
assertEquals(21, qrList.getCurrentStartRecordNumber());
assertEquals(40, qrList.getCurrentEndRecordNumber());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 20;
}
};
qrList.allRecordCount = 61;
qrList.calculatePageInfo(20, 20);
assertEquals(20, qrList.getPageSize());
@ -157,14 +207,24 @@ public class QueryResponseListTest extends UnitFessTestCase {
QueryResponseList qrList;
List<String> pnList;
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 20;
}
};
qrList.allRecordCount = 20;
qrList.calculatePageInfo(0, 20);
pnList = qrList.getPageNumberList();
assertEquals(1, pnList.size());
assertEquals("1", pnList.get(0));
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 20;
}
};
qrList.allRecordCount = 61;
qrList.calculatePageInfo(0, 20);
pnList = qrList.getPageNumberList();
@ -174,7 +234,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
assertEquals("3", pnList.get(2));
assertEquals("4", pnList.get(3));
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 20;
}
};
qrList.allRecordCount = 200;
qrList.calculatePageInfo(0, 20);
pnList = qrList.getPageNumberList();
@ -186,7 +251,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
assertEquals("5", pnList.get(4));
assertEquals("6", pnList.get(5));
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 1;
}
};
qrList.allRecordCount = 21;
qrList.calculatePageInfo(20, 20);
pnList = qrList.getPageNumberList();
@ -194,7 +264,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
assertEquals("1", pnList.get(0));
assertEquals("2", pnList.get(1));
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 20;
}
};
qrList.allRecordCount = 61;
qrList.calculatePageInfo(20, 20);
pnList = qrList.getPageNumberList();
@ -204,7 +279,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
assertEquals("3", pnList.get(2));
assertEquals("4", pnList.get(3));
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 20;
}
};
qrList.allRecordCount = 200;
qrList.calculatePageInfo(20, 20);
pnList = qrList.getPageNumberList();
@ -219,4 +299,91 @@ public class QueryResponseListTest extends UnitFessTestCase {
}
public void test_calculatePageInfo_collapse() {
QueryResponseList qrList;
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 0;
}
};
qrList.calculatePageInfo(0, 20);
assertEquals(20, qrList.getPageSize());
assertEquals(1, qrList.getCurrentPageNumber());
assertEquals(0, qrList.getAllRecordCount());
assertEquals(1, qrList.getAllPageCount());
assertEquals(false, qrList.isExistPrevPage());
assertEquals(false, qrList.isExistNextPage());
assertEquals(0, qrList.getCurrentStartRecordNumber());
assertEquals(0, qrList.getCurrentEndRecordNumber());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 10;
}
};
qrList.allRecordCount = 20;
qrList.calculatePageInfo(0, 20);
assertEquals(20, qrList.getPageSize());
assertEquals(1, qrList.getCurrentPageNumber());
assertEquals(20, qrList.getAllRecordCount());
assertEquals(1, qrList.getAllPageCount());
assertEquals(false, qrList.isExistPrevPage());
assertEquals(false, qrList.isExistNextPage());
assertEquals(1, qrList.getCurrentStartRecordNumber());
assertEquals(20, qrList.getCurrentEndRecordNumber());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 10;
}
};
qrList.allRecordCount = 21;
qrList.calculatePageInfo(0, 20);
assertEquals(20, qrList.getPageSize());
assertEquals(1, qrList.getCurrentPageNumber());
assertEquals(21, qrList.getAllRecordCount());
assertEquals(1, qrList.getAllPageCount());
assertEquals(false, qrList.isExistPrevPage());
assertEquals(false, qrList.isExistNextPage());
assertEquals(1, qrList.getCurrentStartRecordNumber());
assertEquals(20, qrList.getCurrentEndRecordNumber());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 21;
}
};
qrList.allRecordCount = 41;
qrList.calculatePageInfo(0, 20);
assertEquals(20, qrList.getPageSize());
assertEquals(1, qrList.getCurrentPageNumber());
assertEquals(41, qrList.getAllRecordCount());
assertEquals(3, qrList.getAllPageCount());
assertEquals(false, qrList.isExistPrevPage());
assertEquals(true, qrList.isExistNextPage());
assertEquals(1, qrList.getCurrentStartRecordNumber());
assertEquals(20, qrList.getCurrentEndRecordNumber());
qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
@Override
public int size() {
return 1;
}
};
qrList.allRecordCount = 41;
qrList.calculatePageInfo(20, 20);
assertEquals(20, qrList.getPageSize());
assertEquals(2, qrList.getCurrentPageNumber());
assertEquals(41, qrList.getAllRecordCount());
assertEquals(2, qrList.getAllPageCount());
assertEquals(true, qrList.isExistPrevPage());
assertEquals(false, qrList.isExistNextPage());
assertEquals(21, qrList.getCurrentStartRecordNumber());
assertEquals(40, qrList.getCurrentEndRecordNumber());
}
}