232 lines
8.7 KiB
JavaScript
232 lines
8.7 KiB
JavaScript
/* global __ */
|
|
|
|
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 lexicographic sorter.
|
|
searchid = "scs_" + new Date().getTime(); // scs for Staff Client Search
|
|
}
|
|
me.searchid = searchid;
|
|
|
|
var searches_stored = localStorage.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?" +
|
|
current_search.query +
|
|
"&limit=" +
|
|
current_search.limit +
|
|
"&sort_by=" +
|
|
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?" +
|
|
current_search.query +
|
|
"&limit=" +
|
|
current_search.limit +
|
|
"&sort_by=" +
|
|
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 ===
|
|
parseInt(current_search.offset) - newresults.length
|
|
) {
|
|
current_search.results = newresults.concat(
|
|
current_search.results
|
|
);
|
|
} else if (
|
|
(searchOffset =
|
|
parseInt(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;
|
|
localStorage.setItem("searches", JSON.stringify(searches));
|
|
$(document).ready(function () {
|
|
$('#searchresults table tr a[href*="/detail.pl"]').each(
|
|
function () {
|
|
$(this).attr(
|
|
"href",
|
|
$(this).attr("href") + "&searchid=" + me.searchid
|
|
);
|
|
}
|
|
);
|
|
});
|
|
};
|
|
|
|
me.show = function () {
|
|
if (current_search) {
|
|
me.curPos = $.inArray(biblionumber, current_search.results);
|
|
if (
|
|
parseInt(current_search.offset) + me.curPos <=
|
|
current_search.pagelen
|
|
) {
|
|
// First page
|
|
me.offset = 0;
|
|
} else {
|
|
me.offset = parseInt(current_search.offset) - 1;
|
|
}
|
|
|
|
$(document).ready(function () {
|
|
if (me.curPos > -1) {
|
|
var searchURL =
|
|
"/cgi-bin/koha/catalogue/search.pl?" +
|
|
current_search.query +
|
|
"&limit=" +
|
|
current_search.limit +
|
|
"&sort_by=" +
|
|
current_search.sort +
|
|
"&searchid=" +
|
|
me.searchid +
|
|
"&offset=" +
|
|
me.offset;
|
|
var prevbutton;
|
|
var nextbutton;
|
|
if (
|
|
me.curPos === 0 &&
|
|
parseInt(current_search.offset) === 1
|
|
) {
|
|
prevbutton =
|
|
'<span id="browse-previous" class="browse-button" title="' +
|
|
__("Previous") +
|
|
'"><i class="fa fa-arrow-left"></i></span>';
|
|
} else {
|
|
prevbutton =
|
|
'<a href="#" id="browse-previous" class="browse-button" title="' +
|
|
__("Previous") +
|
|
'"><i class="fa fa-arrow-left"></i></a>';
|
|
}
|
|
if (
|
|
parseInt(current_search.offset) + me.curPos ==
|
|
current_search.total
|
|
) {
|
|
nextbutton =
|
|
'<span id="browse-next" class="browse-button" title="' +
|
|
__("Next") +
|
|
'"><i class="fa fa-arrow-right"></i></span>';
|
|
} else {
|
|
nextbutton =
|
|
'<a href="#" id="browse-next" class="browse-button" title="' +
|
|
__("Next") +
|
|
'"><i class="fa fa-arrow-right"></i></a>';
|
|
}
|
|
$("#biblio-view-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> ' +
|
|
__("Results") +
|
|
'</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();
|
|
var url = new URL(
|
|
$(this).attr("href"),
|
|
window.location.origin
|
|
);
|
|
url.searchParams.set("searchid", me.searchid);
|
|
window.location = url.href;
|
|
});
|
|
$('form[name="f"]').append(
|
|
'<input type="hidden" name="searchid" value="' +
|
|
me.searchid +
|
|
'"></input>'
|
|
);
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
me.show_back_link = function () {
|
|
if (current_search) {
|
|
$(document).ready(function () {
|
|
var searchURL =
|
|
"/cgi-bin/koha/catalogue/search.pl?" +
|
|
current_search.query +
|
|
"&limit=" +
|
|
current_search.limit +
|
|
"&sort_by=" +
|
|
current_search.sort +
|
|
"&searchid=" +
|
|
me.searchid;
|
|
$("#previous_search_link").replaceWith(
|
|
'<div><div class="browse-label"><a href="' +
|
|
searchURL +
|
|
'"><i class="fa fa-list"></i> ' +
|
|
__("Go back to the results") +
|
|
"</a></div></div>"
|
|
);
|
|
});
|
|
}
|
|
};
|
|
|
|
return me;
|
|
};
|