5218a0de08
The browse results feature (bug 10404) modified the click events on titles on the search result page (intranet). It introduced bad behaviors: 1/ ctrl+click on a title does not open a new tab 2/ middle click on a title does open a new tab but the browser is not displayed. Note that this patch is not perfect, it fixes the 2 bad behaviors but the ctrl+click gives the focus to the new tab (could go against the preferences of the users). Test plan: 1/ On the staff interface, launch a search (catalogue/search.pl?q=XXX) 2/ When middle-clicking on a title, a new tab should open. On this tab the browse result feature should be displayed 3/ Same for cltr+click Signed-off-by: Nick Clemens <nick@quecheelibrary.org> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
120 lines
6.3 KiB
JavaScript
120 lines
6.3 KiB
JavaScript
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
|
|
}
|
|
this.searchid = searchid;
|
|
|
|
var cookie = $.cookie(me.searchid)
|
|
if (cookie) {
|
|
me.searchCookie = JSON.parse(cookie);
|
|
}
|
|
|
|
var browseRecords = function (movement) {
|
|
var newSearchPos = me.curPos + movement;
|
|
if (newSearchPos > me.searchCookie.results.length - 1) {
|
|
window.location = '/cgi-bin/koha/catalogue/search.pl?' + decodeURIComponent(me.searchCookie.query) + '&limit=' + decodeURIComponent(me.searchCookie.limit) + '&sort=' + me.searchCookie.sort + '&gotoPage=detail.pl&gotoNumber=first&searchid=' + me.searchid + '&offset=' + newSearchPos;
|
|
} else if (newSearchPos < 0) {
|
|
window.location = '/cgi-bin/koha/catalogue/search.pl?' + decodeURIComponent(me.searchCookie.query) + '&limit=' + decodeURIComponent(me.searchCookie.limit) + '&sort=' + me.searchCookie.sort + '&gotoPage=detail.pl&gotoNumber=last&searchid=' + me.searchid + '&offset=' + (me.offset - me.searchCookie.pagelen);
|
|
} else {
|
|
window.location = window.location.href.replace('biblionumber=' + biblionumber, 'biblionumber=' + me.searchCookie.results[newSearchPos]);
|
|
}
|
|
}
|
|
|
|
this.create = function (offset, query, limit, sort, newresults, total) {
|
|
if (me.searchCookie) {
|
|
if (offset === me.searchCookie.offset - newresults.length) {
|
|
me.searchCookie.results = newresults.concat(me.searchCookie.results);
|
|
} else if (searchOffset = me.searchCookie.offset + newresults.length) {
|
|
me.searchCookie.results = me.searchCookie.results.concat(newresults);
|
|
} else {
|
|
delete me.searchCookie;
|
|
}
|
|
}
|
|
if (!me.searchCookie) {
|
|
me.searchCookie = { offset: offset,
|
|
query: query,
|
|
limit: limit,
|
|
sort: sort,
|
|
pagelen: newresults.length,
|
|
results: newresults,
|
|
total: total
|
|
};
|
|
|
|
//Bug_11369 Cleaning up excess searchCookies to prevent cookie overflow in the browser memory.
|
|
var allVisibleCookieKeys = Object.keys( $.cookie() );
|
|
var scsCookieKeys = $.grep( allVisibleCookieKeys,
|
|
function(elementOfArray, indexInArray) {
|
|
return ( elementOfArray.search(/^scs_\d/) != -1 ); //We are looking for specifically staff client searchCookies.
|
|
}
|
|
);
|
|
if (scsCookieKeys.length >= 10) {
|
|
scsCookieKeys.sort(); //Make sure they are in order, oldest first!
|
|
$.removeCookie( scsCookieKeys[0], { path: '/' } );
|
|
}
|
|
//EO Bug_11369
|
|
}
|
|
$.cookie(me.searchid, JSON.stringify(me.searchCookie), { path: '/' });
|
|
$(document).ready(function () {
|
|
//FIXME It's not a good idea to modify the click events
|
|
$('#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;
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
this.show = function () {
|
|
if (me.searchCookie) {
|
|
me.curPos = $.inArray(biblionumber, me.searchCookie.results);
|
|
me.offset = Math.floor((me.searchCookie.offset + me.curPos - 1) / me.searchCookie.pagelen) * me.searchCookie.pagelen;
|
|
|
|
$(document).ready(function () {
|
|
if (me.curPos > -1) {
|
|
var searchURL = '/cgi-bin/koha/catalogue/search.pl?' + decodeURIComponent(me.searchCookie.query) + '&limit=' + decodeURIComponent(me.searchCookie.limit) + '&sort=' + me.searchCookie.sort + '&searchid=' + me.searchid + '&offset=' + me.offset;
|
|
var prevbutton;
|
|
var nextbutton;
|
|
if (me.curPos === 0 && me.searchCookie.offset === 1) {
|
|
prevbutton = '<span id="browse-previous" class="browse-button">« ' + BROWSER_PREVIOUS + '</span>';
|
|
} else {
|
|
prevbutton = '<a href="#" id="browse-previous" class="browse-button">« ' + BROWSER_PREVIOUS + '</a>';
|
|
}
|
|
if (me.searchCookie.offset + me.curPos == me.searchCookie.total) {
|
|
nextbutton = '<span id="browse-next" class="browse-button">' + BROWSER_NEXT + ' »</span>';
|
|
} else {
|
|
nextbutton = '<a href="#" id="browse-next" class="browse-button">' + BROWSER_NEXT + ' »</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="browse-button">' + 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="]').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;
|
|
};
|