Owen Leonard
d0f93e6772
When the CCSR theme is enabled, selecting items in the cart and clicking "place hold" triggers a JavaScript error and fails. This patch adds a function missing from the CCSR version of basket.js. To test, apply the patch and clear your browser cache. - Enable the CCSR theme and put items into the OPAC cart. - Open the cart, select one or more items, and click "place hold." The cart should automatically close and the main window should redirect to the holds screen showing your selections. Signed-off-by: Nicole C. Engard <nengard@bywatersolutions.com> All test passed Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de> Confirmed patch fixes the problem described. All tests and QA script pass, JavaScript only change. No strings involved, save for inclusion in 3.12. Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
546 lines
16 KiB
JavaScript
546 lines
16 KiB
JavaScript
//////////////////////////////////////////////////////////////////////////////
|
|
// BASIC FUNCTIONS FOR COOKIE MANAGEMENT //
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
var CGIBIN = "/cgi-bin/koha/";
|
|
|
|
|
|
var nameCookie = "bib_list";
|
|
var valCookie = readCookie(nameCookie);
|
|
|
|
if(valCookie){
|
|
var arrayRecords = valCookie.split("/");
|
|
if(arrayRecords.length > 0){
|
|
var basketcount = arrayRecords.length-1;
|
|
} else {
|
|
var basketcount = "";
|
|
}
|
|
} else {
|
|
var basketcount = "";
|
|
}
|
|
|
|
function writeCookie(name, val, wd) {
|
|
if (wd) {
|
|
parent.opener.document.cookie = name + "=" + val;
|
|
}
|
|
else {
|
|
parent.document.cookie = name + "=" + val;
|
|
}
|
|
}
|
|
|
|
function readCookieValue (str, val_beg) {
|
|
var val_end = str.indexOf(";", val_end);
|
|
if (val_end == -1)
|
|
val_end = str.length;
|
|
return str.substring(val_beg, val_end);
|
|
}
|
|
|
|
function readCookie(name, wd) {
|
|
var str_name = name + "=";
|
|
var str_len = str_name.length;
|
|
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; expires=" + exp.toGMTString();
|
|
} else {
|
|
document.cookie = name + "=null; 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 = CGIBIN + "opac-basket.pl?" + strCookie;
|
|
var basket = open(loc, "basket", optWin);
|
|
if (window.focus) {basket.focus()}
|
|
}
|
|
else {
|
|
showCartUpdate(MSG_BASKET_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(MSG_RECORD_IN_BASKET);
|
|
}
|
|
}
|
|
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(MSG_RECORD_ADDED);
|
|
updateLink(val,"add");
|
|
}
|
|
}
|
|
}
|
|
|
|
function AllAreChecked(s){
|
|
if (! s.length) { return false;}
|
|
var l = s.length;
|
|
for (var i=0; i < l; i++) {
|
|
if(! s[i].checked) { return false; }
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function SelectAll(){
|
|
if(document.bookbag_form.biblionumber.length > 0) {
|
|
var checky = AllAreChecked(document.bookbag_form.biblionumber);
|
|
var l = document.bookbag_form.biblionumber.length;
|
|
for (var i=0; i < l; i++) {
|
|
document.bookbag_form.biblionumber[i].checked = (checky) ? false : true;
|
|
}
|
|
}
|
|
}
|
|
|
|
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 addSelRecords(valSel) { // function for adding a selection of biblios to the basket
|
|
// from the results list
|
|
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+" "+MSG_NRECORDS_ADDED+", "+(i-nbAdd)+" "+MSG_NRECORDS_IN_BASKET;
|
|
}
|
|
else {
|
|
msg = nbAdd+" "+MSG_NRECORDS_ADDED;
|
|
}
|
|
}
|
|
else {
|
|
if (i < 1) {
|
|
msg = MSG_NO_RECORD_SELECTED;
|
|
}
|
|
else {
|
|
msg = MSG_NO_RECORD_ADDED+" ("+MSG_NRECORDS_IN_BASKET+") !";
|
|
}
|
|
}
|
|
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
|
|
$("#listsDetails").html(msg);
|
|
showLists();
|
|
setTimeout("hideLists()",2000);
|
|
}
|
|
|
|
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){
|
|
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(MSG_RECORD_REMOVED);
|
|
}
|
|
|
|
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){
|
|
s = str.indexOf("/");
|
|
if (s>0){
|
|
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(MSG_CONFIRM_DEL_BASKET);
|
|
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 = "";
|
|
var nameCookie = "bib_list";
|
|
var valCookie = readCookie(nameCookie, 1);
|
|
strCookie = nameCookie + "=" + valCookie;
|
|
var arrayRecords = valCookie.split("/");
|
|
updateBasket(arrayRecords.length-1,top.opener);
|
|
document.location = CGIBIN + "opac-basket.pl?" + strCookie;
|
|
}
|
|
else {
|
|
alert(MSG_NO_RECORD_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(MSG_CONFIRM_DEL_BASKET);
|
|
if (rep) {
|
|
delCookie(nameCookie);
|
|
updateAllLinks(top.opener);
|
|
document.location = "about:blank";
|
|
updateBasket(0,top.opener);
|
|
window.close();
|
|
}
|
|
}
|
|
|
|
|
|
function quit() {
|
|
if (document.myform.records.value) {
|
|
var rep = false;
|
|
rep = confirm(MSG_CONFIRM_DEL_RECORDS);
|
|
if (rep) {
|
|
delSelRecords();
|
|
}
|
|
}
|
|
updateBasket(arrayRecords.length-1,top.opener);
|
|
window.close();
|
|
}
|
|
|
|
function sendBasket() {
|
|
var nameCookie = "bib_list";
|
|
var valCookie = readCookie(nameCookie);
|
|
var strCookie = nameCookie + "=" + valCookie;
|
|
|
|
var loc = CGIBIN + "opac-sendbasket.pl?" + strCookie;
|
|
|
|
var optWin="scrollbars=no,resizable=no,height=300,width=450,top=50,left=100";
|
|
var win_form = open(loc,"win_form",optWin);
|
|
}
|
|
|
|
function downloadBasket() {
|
|
var nameCookie = "bib_list";
|
|
var valCookie = readCookie(nameCookie);
|
|
var strCookie = nameCookie + "=" + valCookie;
|
|
|
|
var loc = CGIBIN + "opac-downloadcart.pl?" + strCookie;
|
|
|
|
open(loc,"win_form",'scrollbars=no,resizable=no,height=300,width=450,top=50,left=100');
|
|
}
|
|
|
|
function printBasket() {
|
|
var loc = document.location + "&print=1";
|
|
document.location = loc;
|
|
}
|
|
|
|
function showMore() {
|
|
var strCookie = "";
|
|
|
|
var nameCookie = "bib_list";
|
|
var valCookie = readCookie(nameCookie);
|
|
if (valCookie) {
|
|
strCookie = nameCookie + "=" + valCookie;
|
|
}
|
|
var loc = CGIBIN + "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 = CGIBIN + "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(MSG_NO_RECORD_SELECTED);
|
|
}
|
|
}
|
|
|
|
function updateBasket(updated_value,target) {
|
|
if(target){
|
|
target.$('#basketcount').html("<span>"+updated_value+"</span>");
|
|
target.$('#cartDetails').html(MSG_IN_YOUR_CART+updated_value);
|
|
} else {
|
|
$('#basketcount').html("<span>"+updated_value+"</span>");
|
|
$('#cartDetails').html(MSG_IN_YOUR_CART+updated_value);
|
|
}
|
|
var basketcount = updated_value;
|
|
}
|
|
|
|
function openBiblio(dest,biblionumber) {
|
|
openerURL=dest+"?biblionumber="+biblionumber;
|
|
opener.document.location = openerURL;
|
|
opener.focus();
|
|
}
|
|
|
|
function addSelToShelf() {
|
|
var items = document.getElementById('records').value;
|
|
if(items){
|
|
document.location = "/cgi-bin/koha/opac-addbybiblionumber.pl?biblionumber="+items;
|
|
} else {
|
|
alert(MSG_NO_RECORD_SELECTED);
|
|
}
|
|
}
|
|
|
|
/// vShelfAdd() builds url string for multiple-biblio adds.
|
|
|
|
function vShelfAdd() {
|
|
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(MSG_NO_RECORD_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 menuWidth = 200;
|
|
var buttonWidth = $("#cartmenulink").innerWidth();
|
|
var buttonOffset = menuWidth - buttonWidth;
|
|
var left = position.left;
|
|
$("#cartDetails").css("position","fixed").css("left",left);
|
|
$("#cartDetails").fadeIn("fast");
|
|
}
|
|
|
|
function showLists(){
|
|
var position = $("#listsmenulink").offset();
|
|
var top = position.top + $("#listsmenulink").outerHeight();
|
|
var menuWidth = 200;
|
|
var buttonWidth = $("#listsmenulink").innerWidth();
|
|
var buttonOffset = menuWidth - buttonWidth;
|
|
var left = position.left;
|
|
$("#listsDetails").css("position","fixed").css("top",top);
|
|
$("#listsDetails").css("position","fixed").css("left",left);
|
|
$("#listsDetails").fadeIn("fast");
|
|
}
|
|
|
|
function hideCart(){
|
|
$("#cartDetails").fadeOut("fast");
|
|
}
|
|
|
|
function hideLists(){
|
|
$("#listsDetails").fadeOut("fast");
|
|
}
|
|
|
|
function updateLink(val,op,target){
|
|
if(target){
|
|
if(op == "add"){
|
|
target.$("a.cart"+val).html(MSG_ITEM_IN_CART).addClass("incart");
|
|
target.$("a.cartR"+val).show();
|
|
} else {
|
|
target.$("a.cart"+val).html(MSG_ITEM_NOT_IN_CART).removeClass("incart").addClass("addtocart cart"+val);
|
|
target.$("a.cartR"+val).hide();
|
|
}
|
|
} else {
|
|
if(op == "add"){
|
|
$("a.cart"+val).html(MSG_ITEM_IN_CART).addClass("incart");
|
|
$("a.cartR"+val).show();
|
|
} else {
|
|
$("a.cart"+val).html(MSG_ITEM_NOT_IN_CART).removeClass("incart").addClass("addtocart cart"+val);
|
|
$("a.cartR"+val).hide();
|
|
}
|
|
}
|
|
}
|
|
|
|
function updateAllLinks(target){
|
|
if(target){
|
|
target.$("a.incart").html(MSG_ITEM_NOT_IN_CART).removeClass("incart").addClass("addtocart");
|
|
target.$("a.cartRemove").hide();
|
|
} else {
|
|
$("a.incart").html(MSG_ITEM_NOT_IN_CART).removeClass("incart").addClass("addtocart");
|
|
$("a.cartRemove").hide();
|
|
}
|
|
}
|
|
|
|
$("#cartDetails").ready(function(){
|
|
$("#cartDetails,#cartmenulink").click(function(){ hideCart(); });
|
|
$("#cartmenulink").click(function(){ openBasket(); return false; });
|
|
$("#cartmenulink").hoverIntent(function(){
|
|
showCart();
|
|
},function(){
|
|
hideCart();
|
|
});
|
|
if(basketcount){ updateBasket(basketcount) }
|
|
});
|
|
|
|
$("#listsmenu").ready(function(){
|
|
$("#listsmenulink").mouseenter(function(){
|
|
var position = $("#listsmenulink").offset();
|
|
var top = position.top + $("#listsmenulink").outerHeight();
|
|
var menuWidth = 200;
|
|
var buttonWidth = $("#listsmenulink").innerWidth();
|
|
var buttonOffset = menuWidth - buttonWidth;
|
|
var left = position.left;
|
|
$("#listsmenu").css("position","fixed").css("top",top);
|
|
$("#listsmenu").css("position","fixed").css("left",left);
|
|
$("#listsmenu").fadeIn("fast");
|
|
});
|
|
$("#listsmenulink").mouseleave(function(){
|
|
$("#listsmenu").fadeOut("fast");
|
|
});
|
|
});
|