From: Galen Charlton Date: Fri, 15 Jun 2018 22:00:44 +0000 (-0400) Subject: make legacy (and page-specific) add/remove cart budgets use AJAX when JS available X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=9f7849147eb7256bc9a7313f1fe2c83367c7632b;p=working%2FEvergreen.git make legacy (and page-specific) add/remove cart budgets use AJAX when JS available Signed-off-by: Galen Charlton --- diff --git a/Open-ILS/src/templates/opac/parts/record/summary.tt2 b/Open-ILS/src/templates/opac/parts/record/summary.tt2 index e8ec227b35..57bfb2dd5c 100644 --- a/Open-ILS/src/templates/opac/parts/record/summary.tt2 +++ b/Open-ILS/src/templates/opac/parts/record/summary.tt2 @@ -99,11 +99,25 @@
[% operation = ctx.mylist.grep('^' _ ctx.bre_id _ '$').size ? "delete" : "add"; + addhref = mkurl(ctx.opac_root _ '/mylist/add', {record => ctx.bre_id}, stop_parms); + delhref = mkurl(ctx.opac_root _ '/mylist/delete', {record => ctx.bre_id}, stop_parms); label = (operation == "add") ? l("Add to Cart") : l("Remove from Cart"); %] - + - [% label %] + [% l("Add to cart") %] + + + + [% l("Remove from cart") %]
diff --git a/Open-ILS/src/templates/opac/parts/result/table.tt2 b/Open-ILS/src/templates/opac/parts/result/table.tt2 index cb9c0bb656..36c26dc440 100644 --- a/Open-ILS/src/templates/opac/parts/result/table.tt2 +++ b/Open-ILS/src/templates/opac/parts/result/table.tt2 @@ -486,14 +486,16 @@ END; {record => rec.id, anchor => 'record_' _ rec.id}, 1); %] diff --git a/Open-ILS/web/js/ui/default/opac/record_selectors.js b/Open-ILS/web/js/ui/default/opac/record_selectors.js index 89de97356e..8290ed5985 100644 --- a/Open-ILS/web/js/ui/default/opac/record_selectors.js +++ b/Open-ILS/web/js/ui/default/opac/record_selectors.js @@ -2,6 +2,7 @@ var rec_selector_block = document.getElementById("record_selector_block"); var rec_selectors = document.getElementsByClassName("result_record_selector"); + var mylist_action_links = document.getElementsByClassName("mylist_action"); var record_cart_count_el = document.getElementById('record_cart_count'); var selected_records_count_el = document.getElementById('selected_records_count'); var select_all_records_el = document.getElementById('select_all_records'); @@ -31,6 +32,7 @@ function syncPageState() { var all_checked = true; + var legacy_adjusted = false; [].forEach.call(rec_selectors, function(el) { el.checked = mylist.includes(parseInt(el.value)); if (el.checked) { @@ -40,7 +42,18 @@ adjustLegacyControlsVis('unchecked', el.value); } toggleRowHighlighting(el); + legacy_adjusted = true; }); + if (!legacy_adjusted) { + [].forEach.call(mylist_action_links, function(el) { + if ('dataset' in el) { + if (el.dataset.action == 'delete') return; + // only need to do this once + var op = mylist.includes(parseInt(el.dataset.recid)) ? 'checked' : 'unchecked'; + adjustLegacyControlsVis(op, el.dataset.recid); + } + }); + } if (select_all_records_el && rec_selectors.length) { select_all_records_el.checked = all_checked; } @@ -60,7 +73,7 @@ } } - function mungeList(op, rec) { + function mungeList(op, rec, resync) { console.debug('calling mungeList to ' + op + ' record ' + rec); var req = new window.XMLHttpRequest(); if (Array.isArray(rec)) { @@ -75,12 +88,14 @@ req.onload = function (evt) { var result = req.response; handleUpdate(result); + if (resync) syncPageState(); } } else { // IE 10/11 req.onload = function (evt) { var result = JSON.parse(req.responseText); handleUpdate(result); + if (resync) syncPageState(); } } req.send(); @@ -117,6 +132,18 @@ [].forEach.call(rec_selectors, function(el) { if (!el.checked) el.disabled = (mylist.length >= max_cart_size); }); + [].forEach.call(mylist_action_links, function(el) { + if ('dataset' in el && el.dataset.action == 'add') { + if (mylist.length >= max_cart_size) { + // hide the add link + el.classList.add('hidden'); + } else { + // show the add link unless the record is + // already in the cart + if (!mylist.includes(parseInt(el.dataset.recid))) el.classList.remove('hidden'); + } + } + }); if (mylist.length >= max_cart_size) { if (alertel) alertel.classList.remove('hidden'); if (select_all_records_el && !select_all_records_el.checked) { @@ -207,5 +234,17 @@ }); } + [].forEach.call(mylist_action_links, function(el) { + el.addEventListener("click", function(evt) { + var recid; + var action; + if ('dataset' in el) { + recid = el.dataset.recid; + action = el.dataset.action; + mungeList(action, recid, true); + evt.preventDefault(); + } + }); + }); })();