3 var rec_selector_block = document.getElementById("record_selector_block");
4 var rec_selectors = document.getElementsByClassName("result_record_selector");
5 var mylist_action_links = document.getElementsByClassName("mylist_action");
6 var record_basket_count_el = document.getElementById('record_basket_count');
7 var selected_records_count_el = document.getElementById('selected_records_count');
8 var select_all_records_el = document.getElementById('select_all_records');
9 var clear_basket_el = document.getElementById('clear_basket');
10 var select_action_el = document.getElementById('select_basket_action');
11 var do_basket_action_el = document.getElementById('do_basket_action');
14 function initialize() {
15 var req = new window.XMLHttpRequest();
16 req.open('GET', '/eg/opac/api/mylist/retrieve');
17 if (('responseType' in req) && (req.responseType = 'json')) {
18 req.onload = function (evt) {
19 var result = req.response;
25 req.onload = function (evt) {
26 var result = JSON.parse(req.responseText);
35 function syncPageState() {
36 var all_checked = true;
37 var legacy_adjusted = false;
38 [].forEach.call(rec_selectors, function(el) {
39 el.checked = mylist.includes(parseInt(el.value));
41 adjustLegacyControlsVis('checked', el.value);
44 adjustLegacyControlsVis('unchecked', el.value);
46 toggleRowHighlighting(el);
47 legacy_adjusted = true;
49 if (!legacy_adjusted) {
50 [].forEach.call(mylist_action_links, function(el) {
51 if ('dataset' in el) {
52 if (el.dataset.action == 'delete') return;
53 // only need to do this once
54 var op = mylist.includes(parseInt(el.dataset.recid)) ? 'checked' : 'unchecked';
55 adjustLegacyControlsVis(op, el.dataset.recid);
59 if (select_all_records_el && rec_selectors.length) {
60 select_all_records_el.checked = all_checked;
65 function handleUpdate(result) {
67 mylist = result.mylist;
68 if (selected_records_count_el) {
69 selected_records_count_el.innerHTML = mylist.length;
71 if (clear_basket_el) {
72 if (mylist.length > 0) {
73 clear_basket_el.classList.remove('hidden');
75 clear_basket_el.classList.add('hidden');
78 if (select_action_el) {
79 if (mylist.length > 0) {
80 select_action_el.removeAttribute('disabled');
82 select_action_el.setAttribute('disabled', 'disabled');
85 if (do_basket_action_el) {
86 if (mylist.length > 0) {
87 do_basket_action_el.removeAttribute('disabled');
89 do_basket_action_el.setAttribute('disabled', 'disabled');
92 if (record_basket_count_el) {
93 record_basket_count_el.innerHTML = mylist.length;
99 function mungeList(op, rec, resync) {
100 console.debug('calling mungeList to ' + op + ' record ' + rec);
101 var req = new window.XMLHttpRequest();
102 if (Array.isArray(rec)) {
103 var qrec = rec.map(function(rec) {
104 return 'record=' + encodeURIComponent(rec);
107 var qrec = 'record=' + encodeURIComponent(rec);
109 req.open('GET', '/eg/opac/api/mylist/' + op + '?' + qrec);
110 if (('responseType' in req) && (req.responseType = 'json')) {
111 req.onload = function (evt) {
112 var result = req.response;
113 handleUpdate(result);
114 if (resync) syncPageState();
118 req.onload = function (evt) {
119 var result = JSON.parse(req.responseText);
120 handleUpdate(result);
121 if (resync) syncPageState();
127 function adjustLegacyControlsVis(op, rec) {
128 if (op == 'add' || op == 'checked') {
130 if (t = document.getElementById('mylist_add_' + rec)) t.classList.add('hidden');
131 if (t = document.getElementById('mylist_delete_' + rec)) t.classList.remove('hidden');
132 } else if (op == 'delete' || op == 'unchecked') {
133 if (t = document.getElementById('mylist_add_' + rec)) t.classList.remove('hidden');
134 if (t = document.getElementById('mylist_delete_' + rec)) t.classList.add('hidden');
138 function findAncestorWithClass(el, cls) {
139 while ((el = el.parentElement) && !el.classList.contains(cls));
142 function toggleRowHighlighting(el) {
143 var row = findAncestorWithClass(el, "result_table_row");
146 row.classList.add('result_table_row_selected');
148 row.classList.remove('result_table_row_selected');
152 function checkMaxCartSize() {
153 if ((typeof max_cart_size === 'undefined') || !max_cart_size) return;
154 var alertel = document.getElementById('hit_selected_record_limit');
155 [].forEach.call(rec_selectors, function(el) {
156 if (!el.checked) el.disabled = (mylist.length >= max_cart_size);
158 [].forEach.call(mylist_action_links, function(el) {
159 if ('dataset' in el && el.dataset.action == 'add') {
160 if (mylist.length >= max_cart_size) {
162 el.classList.add('hidden');
164 // show the add link unless the record is
165 // already in the cart
166 if (!mylist.includes(parseInt(el.dataset.recid))) el.classList.remove('hidden');
170 if (mylist.length >= max_cart_size) {
171 if (alertel) alertel.classList.remove('hidden');
172 if (select_all_records_el && !select_all_records_el.checked) {
173 select_all_records_el.disabled = true;
176 if (alertel) alertel.classList.add('hidden');
177 if (select_all_records_el) select_all_records_el.disabled = false;
181 var all_checked = true;
182 [].forEach.call(rec_selectors, function(el) {
183 el.addEventListener("click", function() {
185 mungeList('add', this.value);
186 adjustLegacyControlsVis('add', this.value);
188 mungeList('delete', this.value);
189 adjustLegacyControlsVis('delete', this.value);
191 toggleRowHighlighting(el);
193 el.classList.remove("hidden");
194 if (!el.checked) all_checked = false;
196 if (select_all_records_el && rec_selectors.length) {
197 select_all_records_el.checked = all_checked;
199 if (rec_selector_block) rec_selector_block.classList.remove("hidden");
201 function deselectSelectedOnPage() {
202 [].forEach.call(rec_selectors, function(el) {
205 adjustLegacyControlsVis('delete', el.value);
206 toggleRowHighlighting(el);
211 if (select_all_records_el) {
212 select_all_records_el.addEventListener('click', function() {
216 [].forEach.call(rec_selectors, function(el) {
219 adjustLegacyControlsVis('add', el.value);
220 toggleRowHighlighting(el);
221 to_add.push(el.value);
224 if (to_add.length > 0) {
225 mungeList('add', to_add);
229 deselectSelectedOnPage();
234 function clearCart() {
235 var req = new window.XMLHttpRequest();
236 req.open('GET', '/eg/opac/api/mylist/clear');
237 if (('responseType' in req) && (req.responseType = 'json')) {
238 req.onload = function (evt) {
239 var result = req.response;
240 handleUpdate(result);
245 req.onload = function (evt) {
246 var result = JSON.parse(req.responseText);
247 handleUpdate(result);
254 if (clear_basket_el) {
255 clear_basket_el.addEventListener('click', function() {
256 if (confirm(window.egStrings['CONFIRM_BASKET_EMPTY'])) {
262 [].forEach.call(mylist_action_links, function(el) {
263 el.addEventListener("click", function(evt) {
266 if ('dataset' in el) {
267 recid = el.dataset.recid;
268 action = el.dataset.action;
269 mungeList(action, recid, true);
270 evt.preventDefault();
275 if (do_basket_action_el) {
276 do_basket_action_el.addEventListener('click', function(evt) {
277 if (select_action_el.options[select_action_el.selectedIndex].value) {
278 window.location.href = select_action_el.options[select_action_el.selectedIndex].value;
280 evt.preventDefault();