From e37672c6fefdb0650b5125f7c8fdb262b872c8ee Mon Sep 17 00:00:00 2001 From: Chris Hallberg <crhallberg@gmail.com> Date: Tue, 27 Sep 2016 11:17:08 -0400 Subject: [PATCH] Fix cart problems with messages, display, uniqueness. --- themes/bootstrap3/js/cart.js | 35 +++++++++++++----------- themes/bootstrap3/templates/header.phtml | 5 +++- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/themes/bootstrap3/js/cart.js b/themes/bootstrap3/js/cart.js index dd768ea40c1..3c67a67bbd8 100644 --- a/themes/bootstrap3/js/cart.js +++ b/themes/bootstrap3/js/cart.js @@ -49,14 +49,21 @@ VuFind.register('cart', function Cart() { } function updateCount() { - var items = _getItems(); + var items = VuFind.cart.getFullItems(); $('#cartItems strong').html(items.length); - } + if (items.length === parseInt(VuFind.translate('bookbagMax'))) { + $('#cartItems .full').removeClass('hidden'); + } else { + $('#cartItems .full').addClass('hidden'); + } function addItem(id, _source) { var source = _source || VuFind.defaultSearchBackend; var cartItems = _getItems(); var cartSources = _getSources(); + if (cartItems.length >= parseInt(VuFind.translate('bookbagMax'))) { + return false; + } var sIndex = cartSources.indexOf(source); if (sIndex < 0) { // Add source to source cookie @@ -66,7 +73,7 @@ VuFind.register('cart', function Cart() { } else { cartItems[cartItems.length] = String.fromCharCode(65 + sIndex) + id; } - Cookies.setItem(_COOKIE, $.unique(cartItems).join(_COOKIE_DELIM), false, '/', _COOKIE_DOMAIN); + Cookies.setItem(_COOKIE, _uniqueArray(cartItems).join(_COOKIE_DELIM), false, '/', _COOKIE_DOMAIN); updateCount(); return true; } @@ -116,7 +123,7 @@ VuFind.register('cart', function Cart() { var _cartNotificationTimeout = false; function _registerUpdate($form) { if ($form) { - $("#updateCart, #bottom_updateCart").unbind('click').click(function cartUpdate(){ + $("#updateCart, #bottom_updateCart").unbind('click').click(function cartUpdate() { var elId = this.id; var selectedBoxes = $("input[name='ids[]']:checked", $form); var selected = []; @@ -124,28 +131,22 @@ VuFind.register('cart', function Cart() { selected[i] = this.value; }); if (selected.length > 0) { - var inCart = 0; var msg = ""; var orig = getFullItems(); $(selected).each(function cartCheckedItemsAdd() { - for (var x in orig) { - if (this === orig[x]) { - inCart++; - return; - } - } var data = this.split('|'); addItem(data[1], data[0]); }); var updated = getFullItems(); var added = updated.length - orig.length; + var inCart = selected.length - added; msg += added + " " + VuFind.translate('itemsAddBag'); + if (updated.length >= parseInt(VuFind.translate('bookbagMax'))) { + msg += "<br/>" + VuFind.translate('bookbagFull'); + } if (inCart > 0 && orig.length > 0) { msg += "<br/>" + inCart + " " + VuFind.translate('itemsInBag'); } - if (updated.length >= VuFind.translate('bookbagMax')) { - msg += "<br/>" + VuFind.translate('bookbagFull'); - } $('#' + elId).data('bs.popover').options.content = msg; $('#cartItems strong').html(updated.length); } else { @@ -174,8 +175,9 @@ VuFind.register('cart', function Cart() { var $parent = $(this).parent(); $parent.find('.cart-add.correct,.cart-remove.correct').removeClass('correct hidden'); $parent.find('.cart-add').click(function cartAddClick() { - addItem(currentId, currentSource); - $parent.find('.cart-add,.cart-remove').toggleClass('hidden'); + if (addItem(currentId, currentSource)) { + $parent.find('.cart-add,.cart-remove').toggleClass('hidden'); + } }); $parent.find('.cart-remove').click(function cartRemoveClick() { removeItem(currentId, currentSource); @@ -188,6 +190,7 @@ VuFind.register('cart', function Cart() { _registerUpdate($form); } $("#updateCart, #bottom_updateCart").popover({content: '', html: true, trigger: 'manual'}); + updateCount(); } // Reveal diff --git a/themes/bootstrap3/templates/header.phtml b/themes/bootstrap3/templates/header.phtml index 2a02a82758a..bdf98502dab 100644 --- a/themes/bootstrap3/templates/header.phtml +++ b/themes/bootstrap3/templates/header.phtml @@ -22,7 +22,10 @@ <? endif; ?> <? $cart = $this->cart(); if ($cart->isActive()): ?> <li id="cartSummary"> - <a id="cartItems" data-lightbox title="<?=$this->transEsc('View Book Bag')?>" href="<?=$this->url('cart-home')?>"><i class="fa fa-suitcase" aria-hidden="true"></i> <strong><?=count($cart->getItems())?></strong> <?=$this->transEsc('items')?><?=$cart->isFull() ? ' (' . $this->transEsc('bookbag_full') . ')' : ''?></a> + <a id="cartItems" data-lightbox title="<?=$this->transEsc('View Book Bag')?>" href="<?=$this->url('cart-home')?>"> + <i class="fa fa-suitcase" aria-hidden="true"></i> <strong><?=count($cart->getItems())?></strong> <?=$this->transEsc('items')?> + <span class="full<?=!$cart->isFull() ? ' hidden' : '' ?>">(<?=$this->transEsc('bookbag_full') ?>)</span> + </a> </li> <? endif; ?> <? if (is_object($account) && $account->loginEnabled()): // hide login/logout if unavailable ?> -- GitLab