Owen Leonard
60e60cad6e
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>
462 lines
14 KiB
JavaScript
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());
|
|
});
|