Koha/koha-tmpl/opac-tmpl/bootstrap/js/basket.js
Owen Leonard 60e60cad6e Bug 28910: Correct eslint errors in OPAC basket.js
This patch corrects eslint errors in the OPAC copy of basket.js:
Indentation inconsistencies, undeclared variables, unused functions,
etc.

To test, apply the patch and test the "Cart" functionality in the
OPAC:

- In the OPAC, add an item to the cart.
- A popup message should appear telling you the item has been added.
- The "Add to cart" link should update to read "In your cart."
- The count if cart items in the header should be updated.
- The "In your cart (remove)" link should work correctly.
- Test this process from both the search results and
  detail pages.
- Open the cart.
- The cart should open correctly.
- In the cart, test all the controls:
  - More details
  - Send
  - Download
  - Empty and close
  - Hide window
  - Print
  - Select all / clear all
  - With checked items:
    - Remove
    - Add to list
    - Place hold
    - Tag

The following unused functions were removed: readCookieValue,
AllAreChecked, SelectAll, and quit. A search of the Koha codebase should
return no results from the opac-tmpl directory.

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
2021-11-02 16:06:51 +01:00

462 lines
14 KiB
JavaScript

/* global __ __p */
/* exported addMultiple delSingleRecord vShelfAdd openBiblio addSelToShelf delBasket sendBasket showMore showLess delSelRecords holdSel selRecord */
//////////////////////////////////////////////////////////////////////////////
// BASIC FUNCTIONS FOR COOKIE MANAGEMENT //
//////////////////////////////////////////////////////////////////////////////
function basketCount(){
var valCookie = readCookie("bib_list");
var basketcount = 0;
if(valCookie){
var arrayRecords = valCookie.split("/");
if(arrayRecords.length > 0){
basketcount = arrayRecords.length-1;
} else {
basketcount = 0;
}
} else {
basketcount = 0;
}
return basketcount;
}
function writeCookie(name, val, wd) {
if (wd) {
parent.opener.document.cookie = name + "=" + val + ";path=/";
}
else {
parent.document.cookie = name + "=" + val + ";path=/";
}
}
function readCookie(name, wd) {
var str_name = name + "=";
var str_cookie = "";
if (wd) {
str_cookie = parent.opener.document.cookie;
}
else {
str_cookie = parent.document.cookie;
}
// fixed - getting the part of the basket that is bib_list
var cookie_parts = str_cookie.split(";");
for(var i=0;i < cookie_parts.length;i++) {
var c = cookie_parts[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if(c.indexOf(str_name) == 0) return c.substring(str_name.length,c.length);
}
return null;
}
function delCookie(name) {
var exp = new Date();
exp.setTime(exp.getTime()-1);
if(parent.opener){
parent.opener.document.cookie = name + "=null; path=/; expires=" + exp.toGMTString();
} else {
document.cookie = name + "=null; path=/; expires=" + exp.toGMTString();
}
}
///////////////////////////////////////////////////////////////////
// SPECIFIC FUNCTIONS USING COOKIES //
///////////////////////////////////////////////////////////////////
function openBasket() {
var strCookie = "";
var nameCookie = "bib_list";
var valCookie = readCookie(nameCookie);
if ( valCookie ) {
strCookie = nameCookie + "=" + valCookie;
}
if ( strCookie ) {
var iW = 820;
var iH = 450;
var optWin = "status=yes,scrollbars=yes,resizable=yes,toolbar=no,location=yes,height="+iH+",width="+iW;
var loc = "/cgi-bin/koha/opac-basket.pl?" + strCookie;
var basket = open(loc, "basket", optWin);
if (window.focus) { basket.focus(); }
}
else {
showCartUpdate( __("Your cart is currently empty") );
}
}
function addRecord(val, selection,NoMsgAlert) {
var nameCookie = "bib_list";
var valCookie = readCookie(nameCookie);
var write = 0;
if ( ! valCookie ) { // empty basket
valCookie = val + '/';
write = 1;
updateBasket(1);
}
else {
// is this record already in the basket ?
var found = false;
var arrayRecords = valCookie.split("/");
for (var i = 0; i < valCookie.length - 1; i++) {
if (val == arrayRecords[i]) {
found = true;
break;
}
}
if ( found ) {
if (selection) {
return 0;
}
if (! NoMsgAlert ) {
showCartUpdate( __p("Bibliographic record", "The item is already in your cart") );
}
}
else {
valCookie += val + '/';
write = 1;
updateBasket(arrayRecords.length);
}
}
if (write) {
writeCookie(nameCookie, valCookie);
if (selection) { // when adding a selection of records
updateLink(val,"add");
return 1;
}
if (! NoMsgAlert ) {
showCartUpdate( __p("Bibliographic record", "The item has been added to your cart") );
updateLink(val,"add");
}
}
}
function addMultiple(){
var c_value = "";
if(document.bookbag_form.biblionumber.length > 0) {
for (var i=0; i < document.bookbag_form.biblionumber.length; i++) {
if (document.bookbag_form.biblionumber[i].checked) {
c_value = c_value + document.bookbag_form.biblionumber[i].value + "/";
}
}
addSelRecords(c_value);
} else {
c_value = c_value + document.bookbag_form.biblionumber.value + "/";
addSelRecords(c_value);
}
}
/* function for adding a selection of biblios to the basket from the results list */
function addSelRecords(valSel) {
var arrayRecords = valSel.split("/");
var i = 0;
var nbAdd = 0;
for (i=0;i<arrayRecords.length;i++) {
if (arrayRecords[i]) {
nbAdd += addRecord(arrayRecords[i], 1);
}
else {
break;
}
}
var msg = "";
if (nbAdd) {
if (i > nbAdd) {
msg = nbAdd+" "+ __p("Bibliographic record", " item(s) added to your cart") +", "+(i-nbAdd)+" " + __("already in your cart");
}
else {
msg = nbAdd+" "+ __p("Bibliographic record", " item(s) added to your cart");
}
}
else {
if (i < 1) {
msg = __p("Bibliographic record", "No item was selected");
}
else {
msg = __p("Bibliographic record", "No item was added to your cart") + " (" + __("already in your cart") + ") !";
}
}
showCartUpdate(msg);
}
function showCartUpdate(msg){
// set body of popup window
$("#cartDetails").html(msg);
showCart();
setTimeout("hideCart()",2000);
}
function showListsUpdate(msg){
// set body of popup window
alert(msg);
}
function selRecord(num, status) {
var str = document.myform.records.value;
if (status){
str += num+"/";
}
else {
str = delRecord(num, str);
}
document.myform.records.value = str;
}
function delSingleRecord(biblionumber){
biblionumber = String( biblionumber );
var nameCookie = "bib_list";
var valCookie = readCookie(nameCookie);
var arrayRecords = valCookie.split("/");
var pos = jQuery.inArray(biblionumber,arrayRecords);
arrayRecords.splice( pos, 1 );
valCookie = arrayRecords.join("/");
writeCookie( nameCookie, valCookie );
updateBasket( arrayRecords.length-1 );
updateLink(biblionumber,"del");
showCartUpdate( __p("Bibliographic record", "The item has been removed from your cart") );
}
function delSelRecords() {
var recordsSel = 0;
var end = 0;
var nameCookie = "bib_list";
var valCookie = readCookie(nameCookie, 1);
if (valCookie) {
var str = document.myform.records.value;
if (str.length > 0){
recordsSel = 1;
var str2 = valCookie;
while (!end){
var s = str.indexOf("/");
if (s>0){
var num = str.substring(0, s);
str = delRecord(num,str);
str2 = delRecord(num,str2);
updateLink(num,"del",top.opener);
} else {
end = 1;
}
}
if (str2.length == 0) { // equivalent to emptying the basket
var rep = false;
rep = confirm( __("Are you sure you want to empty your cart?") );
if (rep) {
delCookie(nameCookie);
document.location = "about:blank";
updateBasket(0,top.opener);
window.close();
} else {
return;
}
} else {
writeCookie(nameCookie, str2, 1);
}
}
}
if (recordsSel) {
var strCookie = "";
valCookie = readCookie(nameCookie, 1);
strCookie = nameCookie + "=" + valCookie;
var arrayRecords = valCookie.split("/");
updateBasket(arrayRecords.length-1,top.opener);
document.location = "/cgi-bin/koha/opac-basket.pl?" + strCookie;
}
else {
alert( __p("Bibliographic record", "No item was selected") );
}
}
function delRecord (n, s) {
var re = /\d/;
var aux = s;
var found = 0;
var pos = -1;
while (!found) {
pos = aux.indexOf(n, pos+1);
var charAfter = aux.charAt(pos+n.length); // character right after the researched string
if (charAfter.match(re)) { // record number inside another one
continue;
}
else { // good record number
aux = s.substring(0, pos)+ s.substring(pos+n.length+1, s.length);
s = aux;
found = 1;
}
}
return s;
}
function delBasket() {
var nameCookie = "bib_list";
var rep = false;
rep = confirm( __("Are you sure you want to empty your cart?") );
if (rep) {
delCookie(nameCookie);
updateAllLinks(top.opener);
document.location = "about:blank";
updateBasket(0,top.opener);
window.close();
}
}
function sendBasket() {
var nameCookie = "bib_list";
var valCookie = readCookie(nameCookie);
var strCookie = nameCookie + "=" + valCookie;
var loc = "/cgi-bin/koha/opac-sendbasket.pl?" + strCookie;
var optWin="scrollbars=yes,resizable=yes,height=600,width=900,top=50,left=100";
open(loc,"win_form",optWin);
}
function showMore() {
var strCookie = "";
var nameCookie = "bib_list";
var valCookie = readCookie(nameCookie);
if (valCookie) {
strCookie = nameCookie + "=" + valCookie;
}
var loc = "/cgi-bin/koha/opac-basket.pl?" + strCookie + "&verbose=1";
document.location = loc;
}
function showLess() {
var strCookie = "";
var nameCookie = "bib_list";
var valCookie = readCookie(nameCookie);
if (valCookie) {
strCookie = nameCookie + "=" + valCookie;
}
var loc = "/cgi-bin/koha/opac-basket.pl?" + strCookie + "&verbose=0";
document.location = loc;
}
function holdSel() {
var items = document.getElementById('records').value;
if (items) {
parent.opener.document.location = "/cgi-bin/koha/opac-reserve.pl?biblionumbers=" + items;
window.close();
} else {
alert( __p("Bibliographic record", "No item was selected") );
}
}
function updateBasket(updated_value,target) {
var bcount = "";
if(updated_value > 0){
bcount = "<span>"+updated_value+"</span>";
}
if(target){
target.$('#basketcount').html(bcount);
} else {
$('#basketcount').html(bcount);
}
}
function openBiblio(dest,biblionumber) {
var openerURL = dest + "?biblionumber=" + biblionumber;
opener.document.location = openerURL;
opener.focus();
}
function addSelToShelf() {
var items = document.getElementById('records').value;
if(items){
var iW = 820;
var iH = 450;
var optWin = "status=yes,scrollbars=yes,resizable=yes,toolbar=no,location=yes,height="+iH+",width="+iW;
var loc = "/cgi-bin/koha/opac-addbybiblionumber.pl?biblionumber="+items;
open(loc, "shelf", optWin);
} else {
alert( __p("Bibliographic record", "No item was selected") );
}
}
/// vShelfAdd() builds url string for multiple-biblio adds.
function vShelfAdd() {
var bibs = new Array;
if(document.bookbag_form.biblionumber.length > 0) {
for (var i=0; i < document.bookbag_form.biblionumber.length; i++) {
if (document.bookbag_form.biblionumber[i].checked) {
bibs.push("biblionumber=" + document.bookbag_form.biblionumber[i].value);
}
}
if (bibs.length == 0) {
showListsUpdate( __p("Bibliographic record", "No item was selected") );
}
return bibs.join("&");
} else {
if (document.bookbag_form.biblionumber.checked) {
return "biblionumber=" + document.bookbag_form.biblionumber.value;
}
}
}
function showCart(){
var position = $("#cartmenulink").offset();
var scrolld = $(window).scrollTop();
var top = position.top + $("#cartmenulink").outerHeight();
if( scrolld > top ){
top = scrolld + 15;
}
var left = position.left - 0;
$("#cartDetails")
.css({"position":"absolute", "top":top, "left":left})
.fadeIn("fast");
}
function hideCart(){
$("#cartDetails").fadeOut("fast");
}
function updateLink(val,op,target){
if(target){
if(op == "add"){
target.$("a.cart"+val).html( "<i class=\"fa fa-fw fa-shopping-cart\"></i> " + __("In your cart") ).addClass("incart");
target.$("a.cartR"+val).show();
} else {
target.$("a.cart"+val).html( "<i class=\"fa fa-fw fa-shopping-cart\"></i> " + __("Add to cart") ).removeClass("incart").addClass("addtocart cart"+val);
target.$("a.cartR"+val).hide();
}
} else {
if(op == "add"){
$("a.cart"+val).html( "<i class=\"fa fa-fw fa-shopping-cart\"></i> " + __("In your cart") ).addClass("incart");
$("a.cartR"+val).show();
} else {
$("a.cart"+val).html( "<i class=\"fa fa-fw fa-shopping-cart\"></i> " + __("Add to cart") ).removeClass("incart").addClass("addtocart cart"+val);
$("a.cartR"+val).hide();
}
}
}
function updateAllLinks(target){
if(target){
target.$("a.incart").html( "<i class=\"fa fa-fw fa-shopping-cart\"></i> " + __("Add to cart") ).removeClass("incart").addClass("addtocart");
target.$("a.cartRemove").hide();
} else {
$("a.incart").html( "<i class=\"fa fa-fw fa-shopping-cart\"></i> " + __("Add to cart") ).removeClass("incart").addClass("addtocart");
$("a.cartRemove").hide();
}
}
$("#cartDetails").ready(function(){
$("#cartDetails,#cartmenulink").on("click",function(){ hideCart(); });
$("#cartmenulink").click(function(e){
e.preventDefault();
openBasket();
$("li").closest().removeClass("open");
});
updateBasket(basketCount());
});