mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-17 23:13:10 +00:00
DS-2637 Possibility for users to configure the discovery browse page on the fly
Modifications to the following files: -searchFacetFilter.java -browse.js -attribute-handles.xsl -browse.xsl ,enable the user to change the pagination through the gear icon, as was already the case for other browse pages The was an improvement based on the following Jira ticket https://jira.duraspace.org/browse/DS-2637
This commit is contained in:
@@ -17,7 +17,8 @@
|
|||||||
$this = $(this);
|
$this = $(this);
|
||||||
browse_controls = $('#aspect_artifactbrowser_ConfigurableBrowse_div_browse-controls, ' +
|
browse_controls = $('#aspect_artifactbrowser_ConfigurableBrowse_div_browse-controls, ' +
|
||||||
'#aspect_administrative_WithdrawnItems_div_browse-controls, ' +
|
'#aspect_administrative_WithdrawnItems_div_browse-controls, ' +
|
||||||
'#aspect_administrative_PrivateItems_div_browse-controls');
|
'#aspect_administrative_PrivateItems_div_browse-controls, '+
|
||||||
|
'#aspect_discovery_SearchFacetFilter_div_browse-controls');
|
||||||
$('*[name="' +$this.data('name') + '"]', browse_controls).val($this.data('returnvalue'));
|
$('*[name="' +$this.data('name') + '"]', browse_controls).val($this.data('returnvalue'));
|
||||||
$('.btn', browse_controls).click();
|
$('.btn', browse_controls).click();
|
||||||
$this.closest('.open').removeClass('open');
|
$this.closest('.open').removeClass('open');
|
||||||
|
@@ -112,7 +112,8 @@
|
|||||||
<xsl:variable name="gear"
|
<xsl:variable name="gear"
|
||||||
select="//dri:div[@id='aspect.artifactbrowser.ConfigurableBrowse.div.browse-controls'
|
select="//dri:div[@id='aspect.artifactbrowser.ConfigurableBrowse.div.browse-controls'
|
||||||
or @id='aspect.administrative.WithdrawnItems.div.browse-controls'
|
or @id='aspect.administrative.WithdrawnItems.div.browse-controls'
|
||||||
or @id='aspect.administrative.PrivateItems.div.browse-controls']"/>
|
or @id='aspect.administrative.PrivateItems.div.browse-controls'
|
||||||
|
or @id='aspect.discovery.SearchFacetFilter.div.browse-controls']"/>
|
||||||
<xsl:choose>
|
<xsl:choose>
|
||||||
<xsl:when test="$position = 'top' and $gear">
|
<xsl:when test="$position = 'top' and $gear">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -412,7 +413,8 @@
|
|||||||
<xsl:for-each
|
<xsl:for-each
|
||||||
select="//dri:div[@id='aspect.artifactbrowser.ConfigurableBrowse.div.browse-controls'
|
select="//dri:div[@id='aspect.artifactbrowser.ConfigurableBrowse.div.browse-controls'
|
||||||
or @id='aspect.administrative.WithdrawnItems.div.browse-controls'
|
or @id='aspect.administrative.WithdrawnItems.div.browse-controls'
|
||||||
or @id='aspect.administrative.PrivateItems.div.browse-controls']//dri:field[@type='select']">
|
or @id='aspect.administrative.PrivateItems.div.browse-controls'
|
||||||
|
or @id='aspect.discovery.SearchFacetFilter.div.browse-controls']//dri:field[@type='select']">
|
||||||
<xsl:if test="position() > 1">
|
<xsl:if test="position() > 1">
|
||||||
<li class="divider"/>
|
<li class="divider"/>
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
|
@@ -104,7 +104,8 @@
|
|||||||
|
|
||||||
<xsl:template match="dri:div[@id = 'aspect.artifactbrowser.ConfigurableBrowse.div.browse-controls'
|
<xsl:template match="dri:div[@id = 'aspect.artifactbrowser.ConfigurableBrowse.div.browse-controls'
|
||||||
or @id='aspect.administrative.WithdrawnItems.div.browse-controls'
|
or @id='aspect.administrative.WithdrawnItems.div.browse-controls'
|
||||||
or @id='aspect.administrative.PrivateItems.div.browse-controls']">
|
or @id='aspect.administrative.PrivateItems.div.browse-controls'
|
||||||
|
or @id='aspect.discovery.SearchFacetFilter.div.browse-controls']">
|
||||||
<div>
|
<div>
|
||||||
<xsl:call-template name="copy-attributes"/>
|
<xsl:call-template name="copy-attributes"/>
|
||||||
<xsl:attribute name="rend">
|
<xsl:attribute name="rend">
|
||||||
|
@@ -77,6 +77,8 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
|
|||||||
|
|
||||||
private SearchService searchService = null;
|
private SearchService searchService = null;
|
||||||
private static final Message T_go = message("xmlui.general.go");
|
private static final Message T_go = message("xmlui.general.go");
|
||||||
|
private static final Message T_rpp = message("xmlui.Discovery.AbstractSearch.rpp");
|
||||||
|
private static final int[] RESULTS_PER_PAGE_PROGRESSION = {5, 10, 20, 40, 60, 80, 100};
|
||||||
|
|
||||||
public SearchFacetFilter() {
|
public SearchFacetFilter() {
|
||||||
|
|
||||||
@@ -220,9 +222,9 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
|
|||||||
DiscoverFacetField discoverFacetField;
|
DiscoverFacetField discoverFacetField;
|
||||||
if(request.getParameter(SearchFilterParam.STARTS_WITH) != null)
|
if(request.getParameter(SearchFilterParam.STARTS_WITH) != null)
|
||||||
{
|
{
|
||||||
discoverFacetField = new DiscoverFacetField(facetField, DiscoveryConfigurationParameters.TYPE_TEXT, DEFAULT_PAGE_SIZE + 1, DiscoveryConfigurationParameters.SORT.VALUE, request.getParameter(SearchFilterParam.STARTS_WITH).toLowerCase());
|
discoverFacetField = new DiscoverFacetField(facetField, DiscoveryConfigurationParameters.TYPE_TEXT, getPageSize() + 1, DiscoveryConfigurationParameters.SORT.VALUE, request.getParameter(SearchFilterParam.STARTS_WITH).toLowerCase());
|
||||||
}else{
|
}else{
|
||||||
discoverFacetField = new DiscoverFacetField(facetField, DiscoveryConfigurationParameters.TYPE_TEXT, DEFAULT_PAGE_SIZE + 1, DiscoveryConfigurationParameters.SORT.VALUE);
|
discoverFacetField = new DiscoverFacetField(facetField, DiscoveryConfigurationParameters.TYPE_TEXT, getPageSize() + 1, DiscoveryConfigurationParameters.SORT.VALUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -269,6 +271,7 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
|
|||||||
Division div = body.addDivision("browse-by-" + request.getParameter(SearchFilterParam.FACET_FIELD), "primary");
|
Division div = body.addDivision("browse-by-" + request.getParameter(SearchFilterParam.FACET_FIELD), "primary");
|
||||||
|
|
||||||
addBrowseJumpNavigation(div, browseParams, request);
|
addBrowseJumpNavigation(div, browseParams, request);
|
||||||
|
addBrowseControls(div, browseParams);
|
||||||
|
|
||||||
// Set up the major variables
|
// Set up the major variables
|
||||||
//Collection collection = (Collection) dso;
|
//Collection collection = (Collection) dso;
|
||||||
@@ -307,20 +310,20 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
|
|||||||
|
|
||||||
//Only show the nextpageurl if we have at least one result following our current results
|
//Only show the nextpageurl if we have at least one result following our current results
|
||||||
String nextPageUrl = null;
|
String nextPageUrl = null;
|
||||||
if (values.size() == (DEFAULT_PAGE_SIZE + 1))
|
if (values.size() == (getPageSize() + 1))
|
||||||
{
|
{
|
||||||
nextPageUrl = getNextPageURL(browseParams, request);
|
nextPageUrl = getNextPageURL(browseParams, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int shownItemsMax = offSet + (DEFAULT_PAGE_SIZE < values.size() ? values.size() - 1 : values.size());
|
int shownItemsMax = offSet + (getPageSize() < values.size() ? values.size() - 1 : values.size());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// We put our total results to -1 so this doesn't get shown in the results (will be hidden by the xsl)
|
// We put our total results to -1 so this doesn't get shown in the results (will be hidden by the xsl)
|
||||||
// The reason why we do this is because solr 1.4 can't retrieve the total number of facets found
|
// The reason why we do this is because solr 1.4 can't retrieve the total number of facets found
|
||||||
results.setSimplePagination(-1, offSet + 1,
|
results.setSimplePagination((int) queryResults.getTotalSearchResults(), offSet + 1,
|
||||||
shownItemsMax, getPreviousPageURL(browseParams, request), nextPageUrl);
|
shownItemsMax, getPreviousPageURL(browseParams, request), nextPageUrl);
|
||||||
|
|
||||||
Table singleTable = results.addTable("browse-by-" + facetField + "-results", (int) (queryResults.getDspaceObjects().size() + 1), 1);
|
Table singleTable = results.addTable("browse-by-" + facetField + "-results", (int) (queryResults.getDspaceObjects().size() + 1), 1);
|
||||||
@@ -329,9 +332,9 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
|
|||||||
|
|
||||||
|
|
||||||
int end = values.size();
|
int end = values.size();
|
||||||
if(DEFAULT_PAGE_SIZE < end)
|
if(getPageSize() < end)
|
||||||
{
|
{
|
||||||
end = DEFAULT_PAGE_SIZE;
|
end = getPageSize();
|
||||||
}
|
}
|
||||||
for (int i = 0; i < end; i++) {
|
for (int i = 0; i < end; i++) {
|
||||||
DiscoverResult.FacetResult value = values.get(i);
|
DiscoverResult.FacetResult value = values.get(i);
|
||||||
@@ -441,7 +444,7 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
|
|||||||
Map<String, String> parameters = new HashMap<String, String>();
|
Map<String, String> parameters = new HashMap<String, String>();
|
||||||
parameters.putAll(browseParams.getCommonBrowseParams());
|
parameters.putAll(browseParams.getCommonBrowseParams());
|
||||||
parameters.putAll(browseParams.getControlParameters());
|
parameters.putAll(browseParams.getControlParameters());
|
||||||
parameters.put(SearchFilterParam.OFFSET, String.valueOf(offSet + DEFAULT_PAGE_SIZE));
|
parameters.put(SearchFilterParam.OFFSET, String.valueOf(offSet + getPageSize()));
|
||||||
|
|
||||||
// Add the filter queries
|
// Add the filter queries
|
||||||
String url = generateURL("search-filter", parameters);
|
String url = generateURL("search-filter", parameters);
|
||||||
@@ -466,7 +469,7 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
|
|||||||
Map<String, String> parameters = new HashMap<String, String>();
|
Map<String, String> parameters = new HashMap<String, String>();
|
||||||
parameters.putAll(browseParams.getCommonBrowseParams());
|
parameters.putAll(browseParams.getCommonBrowseParams());
|
||||||
parameters.putAll(browseParams.getControlParameters());
|
parameters.putAll(browseParams.getControlParameters());
|
||||||
parameters.put(SearchFilterParam.OFFSET, String.valueOf(offset - DEFAULT_PAGE_SIZE));
|
parameters.put(SearchFilterParam.OFFSET, String.valueOf(offset - getPageSize()));
|
||||||
|
|
||||||
// Add the filter queries
|
// Add the filter queries
|
||||||
String url = generateURL("search-filter", parameters);
|
String url = generateURL("search-filter", parameters);
|
||||||
@@ -574,5 +577,54 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
|
|||||||
|
|
||||||
return dso;
|
return dso;
|
||||||
}
|
}
|
||||||
|
protected int getPageSize() {
|
||||||
|
try {
|
||||||
|
int rpp =Integer.parseInt(ObjectModelHelper.getRequest(objectModel).getParameter("rpp"));
|
||||||
|
DEFAULT_PAGE_SIZE=rpp;
|
||||||
|
return rpp;
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
return DEFAULT_PAGE_SIZE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the controls to changing sorting and display options.
|
||||||
|
*
|
||||||
|
* @param div
|
||||||
|
* @param params
|
||||||
|
* @throws WingException
|
||||||
|
*/
|
||||||
|
private void addBrowseControls(Division div, SearchFilterParam params)
|
||||||
|
throws WingException
|
||||||
|
{
|
||||||
|
// Prepare a Map of query parameters required for all links
|
||||||
|
Map<String, String> queryParams = new HashMap<String, String>();
|
||||||
|
|
||||||
|
queryParams.putAll(params.getCommonBrowseParams());
|
||||||
|
Request request = ObjectModelHelper.getRequest(objectModel);
|
||||||
|
queryParams.put("order",request.getParameter("order"));
|
||||||
|
String facetField = request.getParameter(SearchFilterParam.FACET_FIELD);
|
||||||
|
Division controls = div.addInteractiveDivision("browse-controls", "search-filter?field="+facetField,
|
||||||
|
Division.METHOD_POST, "browse controls");
|
||||||
|
|
||||||
|
// Add all the query parameters as hidden fields on the form
|
||||||
|
for (Map.Entry<String, String> param : queryParams.entrySet())
|
||||||
|
{
|
||||||
|
controls.addHidden(param.getKey()).setValue(param.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
Para controlsForm = controls.addPara();
|
||||||
|
// Create a control for the number of records to display
|
||||||
|
controlsForm.addContent(T_rpp);
|
||||||
|
|
||||||
|
Select rppSelect = controlsForm.addSelect("rpp");
|
||||||
|
|
||||||
|
for (int i : RESULTS_PER_PAGE_PROGRESSION)
|
||||||
|
{
|
||||||
|
rppSelect.addOption((i == getPageSize()), i, Integer.toString(i));
|
||||||
|
}
|
||||||
|
controlsForm.addButton("update").setValue("update");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user