Koha/koha-tmpl/intranet-tmpl/js/browser.js
Fridolin Somers 2fade168c8
Bug 23438: Use Font Awesome icons in intranet search results browser
In intranet after a search you see a results browser top left of biblio record details.

Actually this uses text for links next and previous with a character for the arrows.
I propose to use Font Awesome icons arrows.

In fact the translated text is often too large for those buttons.
For example "Previous" is "Préédant" in french and it causes the next and previous buttons to display on two lines.
Using icons is more compact and easy to use.

This patch also adds the list icon to back to results link and changes for a minimal text "Results".

1) Go to intranet
2) Perform a search with a few results
3) Click on first record
4) Check browser displays well
5) Click on next icon, check you go to next search result
6) Click on revious icon, check you go to previous search result
7) Click on "Results", you come back to search results
8) Clik on "Last" and click on last record
9) Check browser displays well

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
2019-08-13 11:39:57 +01:00

127 lines
6.6 KiB
JavaScript

/* global BROWSER_PREVIOUS BROWSER_NEXT BROWSER_RETURN_TO_SEARCH */
if ( KOHA === undefined ) var KOHA = {};
KOHA.browser = function (searchid, biblionumber) {
var me = this;
if (!searchid) {
// We are generating a clean numeric datetime representation so we can easily compare them using the default javascript lexigraphic sorter.
searchid = 'scs_' + (new Date()).getTime(); // scs for Staff Client Search
}
me.searchid = searchid;
var searches_stored = sessionStorage.getItem('searches');
var current_search;
var searches = {};
if ( searches_stored ) {
searches = JSON.parse(searches_stored);
current_search = searches[me.searchid];
// Remove old entries
var searchids = Object.keys(searches);
var nb_searches = searchids.length;
if ( nb_searches > 20 ) { // No need to keep more than 20 searches
searchids = searchids.sort();
for ( var i = 0 ; i < nb_searches - 20 ; i++ ) {
delete searches[searchids[i]];
}
}
}
var browseRecords = function (movement) {
var newSearchPos = me.curPos + movement;
if (newSearchPos > current_search.results.length - 1) {
window.location = '/cgi-bin/koha/catalogue/search.pl?' + decodeURIComponent(current_search.query) + '&limit=' + decodeURIComponent(current_search.limit) + '&sort=' + current_search.sort + '&gotoPage=detail.pl&gotoNumber=first&searchid=' + me.searchid + '&offset=' + newSearchPos;
} else if (newSearchPos < 0) {
window.location = '/cgi-bin/koha/catalogue/search.pl?' + decodeURIComponent(current_search.query) + '&limit=' + decodeURIComponent(current_search.limit) + '&sort=' + current_search.sort + '&gotoPage=detail.pl&gotoNumber=last&searchid=' + me.searchid + '&offset=' + (me.offset - current_search.pagelen);
} else {
window.location = window.location.href.replace('biblionumber=' + biblionumber, 'biblionumber=' + current_search.results[newSearchPos]);
}
}
me.create = function (offset, query, limit, sort, newresults, total) {
if (current_search) {
if (offset === current_search.offset - newresults.length) {
current_search.results = newresults.concat(current_search.results);
} else if (searchOffset = current_search.offset + newresults.length) {
current_search.results = current_search.results.concat(newresults);
} else {
delete current_search;
}
}
if (!current_search) {
current_search = { offset: offset,
query: query,
limit: limit,
sort: sort,
pagelen: newresults.length,
results: newresults,
total: total,
searchid: searchid
};
}
searches[me.searchid] = current_search;
sessionStorage.setItem('searches', JSON.stringify(searches));
$(document).ready(function () {
//FIXME It's not a good idea to modify the click events
$('#searchresults table tr a[href*="/detail.pl"]').on('click', function (ev) {
ev.preventDefault();
});
$('#searchresults table tr a[href*="/detail.pl"]').on('mousedown', function (ev) {
if ( ev.which == 2 || ev.which == 1 && ev.ctrlKey ) {
// Middle click or ctrl + click
ev.preventDefault();
var newwindow = window.open( $(this).attr('href') + '&searchid=' + me.searchid, '_blank' );
newwindow.blur();
window.focus();
} else if ( ev.which == 1 ) {
// Left click
ev.preventDefault();
window.location = $(this).attr('href') + '&searchid=' + me.searchid;
}
});
});
};
me.show = function () {
if (current_search) {
me.curPos = $.inArray(biblionumber, current_search.results);
me.offset = Math.floor((current_search.offset + me.curPos - 1) / current_search.pagelen) * current_search.pagelen;
$(document).ready(function () {
if (me.curPos > -1) {
var searchURL = '/cgi-bin/koha/catalogue/search.pl?' + decodeURIComponent(current_search.query) + '&limit=' + decodeURIComponent(current_search.limit) + '&sort=' + current_search.sort + '&searchid=' + me.searchid + '&offset=' + me.offset;
var prevbutton;
var nextbutton;
if (me.curPos === 0 && current_search.offset === 1) {
prevbutton = '<span id="browse-previous" class="browse-button" title="' + BROWSER_PREVIOUS + '"><i class="fa fa-arrow-left"></i></span>';
} else {
prevbutton = '<a href="#" id="browse-previous" class="browse-button" title="' + BROWSER_PREVIOUS + '"><i class="fa fa-arrow-left"></i></a>';
}
if (current_search.offset + me.curPos == current_search.total) {
nextbutton = '<span id="browse-next" class="browse-button" title="' + BROWSER_NEXT + '"><i class="fa fa-arrow-right"></i></span>';
} else {
nextbutton = '<a href="#" id="browse-next" class="browse-button" title="' + BROWSER_NEXT + '"><i class="fa fa-arrow-right"></i></a>';
}
$('#menu').before('<div class="browse-controls"><div class="browse-controls-inner"><div class="browse-label"><a href="' + searchURL + '" id="browse-return-to-results" class="searchwithcontext"><i class="fa fa-list"></i> ' + BROWSER_RETURN_TO_SEARCH + '</a></div><div class="browse-prev-next">' + prevbutton + nextbutton + '</div></div></div>');
$('a#browse-previous').click(function (ev) {
ev.preventDefault();
browseRecords(-1);
});
$('a#browse-next').click(function (ev) {
ev.preventDefault();
browseRecords(1);
});
$('a[href*="biblionumber="]').not('a[target="_blank"]').click(function (ev) {
ev.preventDefault();
window.location = $(this).attr('href') + '&searchid=' + me.searchid;
});
$('form[name="f"]').append('<input type="hidden" name="searchid" value="' + me.searchid + '"></input>');
}
});
}
};
return me;
};