Koha-clms/koha-tmpl/intranet-tmpl/prog/js/pages/results.js

569 lines
18 KiB
JavaScript

/* global KOHA biblionumber new_results_browser addMultiple vShelfAdd openWindow search_result SEARCH_RESULTS PREF_IntranetCoce PREF_CoceProviders CoceHost CoceProviders addRecord delSingleRecord PREF_BrowseResultSelection resetSearchContext addBibToContext delBibToContext getContextBiblioNumbers holdfor_cardnumber holdforclub holdforsupplyill strQuery PREF_StaffHighlightedWords PREF_NotHighlightedWords __ */
function verify_cover_images() {
/* Loop over each container in the template which contains covers */
var coverSlides =
$(".cover-slides"); /* One coverSlides for each search result */
coverSlides.each(function (index) {
var slide = $(this);
var biblionumber = $(this).data("biblionumber");
var coverImages = $(
".cover-image",
slide
); /* Multiple coverImages for each coverSlides */
var blanks = [];
coverImages.each(function (index) {
var div = $(this);
var coverId = div.attr("id");
/* Find the image in the container */
var img = div.find("img")[0];
if ($(img).length > 0) {
if (
(img.complete != null && !img.complete) ||
img.naturalHeight == 0
) {
/* No image loaded in the container. Remove the slide */
blanks.push(coverId);
div.remove();
} else {
/* Check if Amazon image is present */
if (div.hasClass("amazon-bookcoverimg")) {
w = img.width;
h = img.height;
if (w == 1 || h == 1) {
/* Amazon returned single-pixel placeholder */
/* Remove the container */
blanks.push(coverId);
div.remove();
}
}
/* Check if Local image is present */
if (div.hasClass("local-coverimg")) {
w = img.width;
h = img.height;
if (w == 1 || h == 1) {
/* Local cover image returned single-pixel placeholder */
/* Remove the container */
blanks.push(coverId);
div.remove();
}
}
if (div.hasClass("custom-img")) {
/* Check for image from CustomCoverImages system preference */
if (
(img.complete != null && !img.complete) ||
img.naturalHeight == 0
) {
/* No image was loaded via the CustomCoverImages system preference */
/* Remove the container */
blanks.push(coverId);
div.remove();
}
}
if (div.hasClass("coce-coverimg")) {
/* Identify which service's image is being loaded by IntranetCoce system pref */
if ($(img).attr("src").indexOf("amazon.com") >= 0) {
div.find(".hint").html(
__("Coce image from Amazon.com")
);
} else if (
$(img).attr("src").indexOf("google.com") >= 0
) {
div.find(".hint").html(
__("Coce image from Google Books")
);
} else if (
$(img).attr("src").indexOf("openlibrary.org") >= 0
) {
div.find(".hint").html(
__("Coce image from Open Library")
);
} else {
blanks.push(coverId);
div.remove();
}
}
if (coverImages.length > 1) {
if (blanks.includes(coverId)) {
/* Don't add covernav link */
} else {
var covernav = $(
'<a href="#" data-coverid="' +
coverId +
'" data-biblionumber="' +
biblionumber +
'" class="cover-nav"></a>'
);
$(covernav).html('<i class="fa fa-circle"></i>');
slide.addClass("cover-slides").append(covernav);
}
}
} /* /IF image loaded */
} else {
blanks.push(coverId);
div.remove();
} /* /IF there is an image tag */
/* console.log( coverImages ); */
});
/* Show the first cover image slide after empty ones have been removed */
$(".cover-image", slide).eq(0).show();
/* Remove "loading" background gif */
$(".bookcoverimg").css("background", "unset");
if ($(".cover-image", slide).length < 2) {
/* Don't show controls for switching between covers if there is only 1 */
$(".cover-nav", slide).remove();
}
/* Set the first navigation link as active */
$(".cover-nav", slide).eq(0).addClass("nav-active");
/* If no slides contain any cover images, remove the container */
if ($(".cover-image:visible", slide).length < 1) {
slide.html(
'<div class="no-image">' +
__("No cover image available") +
"</div>"
);
}
});
}
$(window).load(function () {
verify_cover_images();
});
var toHighlight = {};
var q_array;
$(document).ready(function () {
$("#searchresults").on("click", ".cover-nav", function (e) {
e.preventDefault();
/* Adding click handler for cover image navigation links */
var coverid = $(this).data("coverid");
var biblionumber = $(this).data("biblionumber");
var slides = $("#cover-slides-" + biblionumber);
$(".cover-nav", slides).removeClass("nav-active");
$(this).addClass("nav-active");
$(".cover-image", slides).hide();
$("#" + coverid).show();
});
$(".moretoggle").click(function (e) {
e.preventDefault();
$(this).siblings(".collapsible-facet").toggle();
$(this).siblings(".moretoggle").toggle();
$(this).toggle();
});
$("#cartsubmit").click(function (e) {
e.preventDefault();
addMultiple();
});
$(".addtolist").on("click", function (e) {
e.preventDefault();
var shelfnumber = $(this).data("shelfnumber");
var vshelf = vShelfAdd();
if (vshelf) {
if ($(this).hasClass("morelists")) {
openWindow(
"/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?" +
vshelf
);
} else if ($(this).hasClass("newlist")) {
openWindow(
"/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?newshelf=1&" +
vshelf
);
} else {
openWindow(
"/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?shelfnumber=" +
shelfnumber +
"&confirm=1&" +
vshelf
);
}
}
});
$("#z3950submit").click(function () {
PopupZ3950();
return false;
});
$("#searchheader").on("click", ".browse_selection", function () {
browse_selection();
return false;
});
$("#searchheader").on("click", ".placehold", function (e) {
e.preventDefault();
$("#holdFor").val("");
$("#holdForClub").val("");
$("#holdForSupplyILL").val("");
placeHold();
});
$(".placeholdfor").click(function (e) {
e.preventDefault();
holdForPatron();
});
$(".placeholdforclub").click(function (e) {
e.preventDefault();
holdForClub();
});
$(".placeholdforsupplyill").click(function (e) {
e.preventDefault();
holdForSupplyILL();
});
$("#forgetholdfor, #forgetholdforclub").click(function (e) {
e.preventDefault();
forgetPatronAndClub();
});
$(".selection").show();
if (search_result.query_desc) {
toHighlight = $("p,span.results_summary,a.title");
q_array = search_result.query_desc.split(" ");
/* ensure that we don't have "" at the end of the array, which can */
/* break the highlighter */
while (q_array.length > 0 && q_array[q_array.length - 1] == "") {
q_array = q_array.splice(0, -1);
}
$("#highlight_toggle_off")
.hide()
.click(function (e) {
e.preventDefault();
highlightOff();
});
$("#highlight_toggle_on")
.show()
.click(function (e) {
e.preventDefault();
highlightOn();
});
if (PREF_StaffHighlightedWords == 1) {
highlightOn();
} else {
highlightOff();
}
}
if (SEARCH_RESULTS) {
var browser = KOHA.browser(
search_result.searchid,
parseInt(biblionumber, 10)
);
browser.create(
search_result.first_result_number,
search_result.query_cgi,
search_result.limit_cgi,
search_result.sort_by,
new_results_browser,
search_result.total
);
}
if (search_result.gotoPage && search_result.gotoNumber) {
if (search_result.gotoNumber == "first") {
window.location =
"/cgi-bin/koha/catalogue/" +
search_result.gotoPage +
"?biblionumber=" +
search_result.first_biblionumber +
"&searchid=" +
search_result.searchid;
} else if (search_result.gotoNumber == "last") {
window.location =
"/cgi-bin/koha/catalogue/" +
search_result.gotoPage +
"?biblionumber=" +
search_result.last_biblionumber +
"&searchid=" +
search_result.searchid;
}
}
if (PREF_IntranetCoce && PREF_CoceProviders) {
KOHA.coce.getURL(CoceHost, CoceProviders);
}
$("#select_all").on("click", function (e) {
e.preventDefault();
selectAll();
});
$("#clear_all").on("click", function (e) {
e.preventDefault();
clearAll();
});
$("#searchresults").on("click", ".addtocart", function (e) {
e.preventDefault();
var selection_id = this.id;
var biblionumber = selection_id.replace("cart", "");
addRecord(biblionumber);
});
$("#searchresults").on("click", ".cartRemove", function (e) {
e.preventDefault();
var selection_id = this.id;
var biblionumber = selection_id.replace("cartR", "");
delSingleRecord(biblionumber);
});
if (!PREF_BrowseResultSelection) {
resetSearchContext();
}
$(".selection").change(function () {
if ($(".selection:checked").length > 0) {
toggleBatchOp(true);
} else {
toggleBatchOp(false);
}
if ($(this).is(":checked") == true) {
addBibToContext($(this).val());
} else {
delBibToContext($(this).val());
}
});
$("#bookbag_form").ready(function () {
$("#bookbag_form input:checkbox").prop("checked", false);
var bibnums = getContextBiblioNumbers();
if (bibnums) {
for (var i = 0; i < bibnums.length; i++) {
var id = "#bib" + bibnums[i];
if ($(id)) {
$(id).attr("checked", true);
}
}
}
});
if ($(".selection:checked") > 0) {
toggleBatchOp(true);
}
$(".results_batch_op").on("click", function (e) {
e.preventDefault();
var op = $(this).data("op");
resultsBatchProcess(op);
});
});
function highlightOff() {
if (toHighlight.length > 0) {
toHighlight.removeHighlight();
$(".highlight_toggle").toggle();
}
}
function highlightOn() {
if (toHighlight.length > 0) {
var x;
for (x in q_array) {
q_array[x] = q_array[x].toLowerCase();
var myStopwords = PREF_NotHighlightedWords.toLowerCase().split("|");
if (
q_array[x].length > 0 &&
$.inArray(q_array[x], myStopwords) == -1
) {
toHighlight.highlight(q_array[x]);
}
}
$(".highlight_toggle").toggle();
}
}
function selectAll() {
$("#bookbag_form")
.find("input[type='checkbox'][name='biblionumber']")
.each(function () {
$(this).prop("checked", true).change();
});
}
function clearAll() {
$("#bookbag_form")
.find("input[type='checkbox'][name='biblionumber']")
.each(function () {
$(this).prop("checked", false).change();
});
}
function placeHold() {
var checkedItems = $(".selection:checked");
if ($(checkedItems).size() == 0) {
alert(__("Nothing is selected"));
return false;
}
var bibs = [];
$(checkedItems).each(function () {
var bib = $(this).val();
bibs.push(bib);
});
bibs.forEach(function (bib) {
var bib_param = $("<input>")
.attr("type", "hidden")
.attr("name", "biblionumber")
.val(bib);
$("#hold_form").append(bib_param);
});
$("#hold_form").submit();
return false;
}
function forgetPatronAndClub() {
Cookies.remove("holdfor", { path: "/", SameSite: "Lax" });
Cookies.remove("holdforclub", { path: "/", SameSite: "Lax" });
Cookies.remove("holdforsupplyill", { path: "/", SameSite: "Lax" }); //TODO: Make a its own button (?)
$(".holdforlink").remove();
$("#placeholdc").html(
'<a class="btn btn-default btn-xs placehold" href="#"><i class="fa-solid fa-bookmark"></i> ' +
__("Place hold") +
"</a>"
);
}
function browse_selection() {
var bibnums = getContextBiblioNumbers();
if (bibnums && bibnums.length > 0) {
var browser = KOHA.browser("", parseInt(biblionumber, 10));
browser.create(
1,
search_result.query_cgi,
search_result.limit_cgi,
search_result.sort_by,
bibnums,
bibnums.length
);
window.location =
"/cgi-bin/koha/catalogue/detail.pl?biblionumber=" +
bibnums[0] +
"&searchid=" +
browser.searchid;
} else {
alert(__("Nothing is selected"));
}
return false;
}
function addToList() {
var checkedItems = $(".selection:checked");
if ($(checkedItems).size() == 0) {
alert(__("Nothing is selected"));
return false;
}
var bibs = "";
$(checkedItems).each(function () {
bibs += $(this).val() + "/";
});
var url =
"/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?biblionumbers=" +
bibs;
window.open(
url,
"Add_to_virtualshelf",
"width=500, height=400, toolbar=false, scrollbars=yes"
);
return false;
}
/* this function open a popup to search on z3950 server. */
function PopupZ3950() {
if (strQuery) {
window.open(
"/cgi-bin/koha/cataloguing/z3950_search.pl?" + strQuery,
"z3950search",
"width=740,height=450,location=yes,toolbar=no,scrollbars=yes,resize=yes"
);
}
}
function holdfor() {
$("#holdFor").val("");
$("#holdForClub").val("");
placeHold();
}
function holdForPatron() {
$("#holdFor").val(holdfor_cardnumber);
placeHold();
}
function holdForClub() {
$("#holdForClub").val(holdforclub);
placeHold();
}
function holdForSupplyILL() {
$("#holdFor").val(holdfor_cardnumber);
$("#holdForSupplyILL").val(holdforsupplyill);
placeHold();
}
function toggleBatchOp(b) {
var results_batch_ops = $("#results_batch_ops");
if (b) {
results_batch_ops.removeClass("disabled");
} else {
results_batch_ops.addClass("disabled");
}
}
function resultsBatchProcess(op) {
var selected = $(".selection:checked");
var form = $("#build_batch_record_modification");
var params = [];
var url = "";
if (op == "edit") {
/* batch edit selected records */
if (selected.length < 1) {
alert(__("You must select at least one record"));
} else {
selected.each(function () {
params.push($(this).val());
});
form.attr(
"action",
"/cgi-bin/koha/tools/batch_record_modification.pl"
);
$("#recordnumber_list").val(params.join("/"));
form.submit();
}
} else if (op == "delete") {
/* batch delete selected records */
if (selected.length < 1) {
alert(__("You must select at least one record"));
} else {
selected.each(function () {
params.push($(this).val());
});
form.attr("action", "/cgi-bin/koha/tools/batch_delete_records.pl");
$("#recordnumber_list").val(params.join("/"));
form.submit();
}
} else if (op == "merge") {
/* merge selected records */
if (selected.length < 2) {
alert(__("At least two records must be selected for merging"));
} else {
selected.each(function () {
params.push("biblionumber=" + $(this).val());
});
url = "/cgi-bin/koha/cataloguing/merge.pl?" + params.join("&");
location.href = url;
}
} else {
return false;
}
}