From fb995d49d11b022a0fa9f37c1923a6dda0cfed0b Mon Sep 17 00:00:00 2001 From: Dan Scott Date: Tue, 2 May 2017 00:23:38 -0400 Subject: [PATCH] LP#1411699 Dojoless advanced copy location search We still use OpenSRF to make the request, but now use the URLSearchParams API + polyfill for CGI parsing. URLSearchParams is a browser API implemented on Chrome, Firefox, and Safari, and a polyfill is available for IE etc from https://github.com/WebReflection/url-search-params. This lets us avoid loading Dojo and just rely on the core, much smaller OpenSRF JS libraries to communicate with the server. Signed-off-by: Dan Scott --- Open-ILS/src/templates/opac/parts/js.tt2 | 6 ++-- Open-ILS/web/js/ui/default/opac/copyloc.js | 46 +++++++++++++++--------------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/Open-ILS/src/templates/opac/parts/js.tt2 b/Open-ILS/src/templates/opac/parts/js.tt2 index 4d5b400f31..23e6b7a7fa 100644 --- a/Open-ILS/src/templates/opac/parts/js.tt2 +++ b/Open-ILS/src/templates/opac/parts/js.tt2 @@ -59,7 +59,7 @@ IF CGI.https; url = url.replace('^http:', 'https:'); END; %] [%- END %] -[%- IF want_dojo; -%] +[%- IF want_dojo AND ctx.page != 'advanced'; -%] @@ -103,6 +104,7 @@ [% INCLUDE "opac/parts/acjs.tt2" IF ctx.page == 'record' %] [% INCLUDE "opac/parts/ac_google_books.tt2" IF ctx.page == 'record' AND ctx.google_books_preview %] [% IF ctx.page == 'advanced' %] + [% END %] diff --git a/Open-ILS/web/js/ui/default/opac/copyloc.js b/Open-ILS/web/js/ui/default/opac/copyloc.js index ddd1a5cf4f..05d57fc6ee 100644 --- a/Open-ILS/web/js/ui/default/opac/copyloc.js +++ b/Open-ILS/web/js/ui/default/opac/copyloc.js @@ -1,17 +1,18 @@ -dojo.require("DojoSRF"); -dojo.require("openils.CGI"); +;(function () { + var org_sel = document.getElementById('adv_org_selector'); + var loc_chunk = document.getElementById('adv_chunk_copy_location'); + var loc_sel = document.getElementById('adv_copy_location_selector'); // called on initial page load and when the advance search org unit // selector is changed. function apply_adv_copy_locations() { // patron selected org - var sel = dojo.byId('adv_org_selector'); - var selected_id = sel.options[sel.selectedIndex].getAttribute('value'); + var selected_id = org_sel.options[org_sel.selectedIndex].getAttribute('value'); var org_unit = aou_hash[selected_id]; if (org_unit.can_have_vols != 't') { - dojo.addClass('adv_chunk_copy_location', 'hidden'); + loc_chunk.classList.add('hidden'); return; } @@ -58,27 +59,21 @@ function fetch_adv_copy_locations(org_ids) { if (list && list.length) { render_adv_copy_locations(list); } else { - dojo.addClass('adv_chunk_copy_location', 'hidden'); + loc_chunk.classList.add('hidden'); } } else { - dojo.addClass('adv_chunk_copy_location', 'hidden'); + loc_chunk.classList.add('hidden'); } } }).send(); } function render_adv_copy_locations(locations) { - var sel = dojo.byId('adv_copy_location_selector'); - var cgi = new openils.CGI(); - // collect any location values from the URL to re-populate the list - var url_selected = cgi.param('fi:locations'); - if (url_selected) { - if (!dojo.isArray(url_selected)) - url_selected = [url_selected]; - } + var params = new URLSearchParams(location.search.slice(1)); + var url_selected = params.getAll('fi:locations'); - dojo.removeClass('adv_chunk_copy_location', 'hidden'); + loc_chunk.classList.remove('hidden'); // sort by name locations = locations.sort( @@ -86,22 +81,27 @@ function render_adv_copy_locations(locations) { ); // remove the previous list of locations - dojo.empty(sel); + var range = document.createRange(); + range.selectNodeContents(loc_sel); + range.deleteContents(); // append the new list of locations - dojo.forEach(locations, function(loc) { + locations.forEach(function(loc) { var attrs = {value : loc.id, innerHTML : loc.name}; if (url_selected && url_selected.indexOf(''+loc.id) > -1) { attrs.selected = true; } - sel.appendChild(dojo.create('option', attrs)); + var option = document.createElement('option'); + Object.keys(attrs).forEach(function(att) { + option[att] = attrs[att]; + }); + loc_sel.appendChild(option); }); } // load the locations on page load -dojo.addOnLoad(function() { +window.addEventListener('load', function(event) { apply_adv_copy_locations(); - dojo.connect(dojo.byId('adv_org_selector'), - 'onchange', apply_adv_copy_locations); + org_sel.addEventListener('change', apply_adv_copy_locations); }); - +})() -- 2.11.0