Fix misalignment of SFX results to bib entries
authorDan Scott <dan@coffeecode.net>
Wed, 25 May 2011 16:50:37 +0000 (12:50 -0400)
committerDan Scott <dan@coffeecode.net>
Wed, 25 May 2011 16:50:37 +0000 (12:50 -0400)
Querying at the record level ensures that the async requests
don't mess up our attempt to synchronize the SFX results with
the bibs to which they belong.

Signed-off-by: Dan Scott <dscott@laurentian.ca>
web/opac/skin/algoma/xml/result/result_table.xml
web/opac/skin/default/js/rdetail.js
web/opac/skin/default/js/result_common.js
web/opac/skin/lul/xml/result/result_table.xml

index 84acae1..0ad16fd 100644 (file)
 
                             <tr name="local_callnumber_list" class="result_table_title_cell">
                                 <td>
-                                <!--
-                                    we snag the record id from the 901 field, and then use it
-                                    for lining up the resolver content
-                                -->
-                                <span 
-                                    type='opac/slot-data' query='datafield[tag="901"] subfield[code="c"]' class='hide_me'>
+                                <span type='opac/slot-data' query='record' class='hide_me'>
                                 <span class='hide_me' debug='true' type='opac/slot-format'><![CDATA[
-                                    curr_title_id = dojo.trim(BT.textContent(item));
-                                ]]></span>
-                                </span>
-                                <!--
-                                    this is very close to the layout in rdetail, we need to find the
-                                    record id in order to place the resolver info in the right spot
-                                -->
-                                <span 
-                                    type='opac/slot-data' query='datafield[tag="022"] subfield' class='hide_me'>
-                                <span class='hide_me' debug='true' type='opac/slot-format'><![CDATA[
-                                    var this_title_id = curr_title_id;
-                                    var issn = '';
-                                    issn = BT.textContent(item) + '';
-                                    issn = issn.replace(/^(\s|.)*?(\d{4}).(\d{3,4}[xX]?)(\s|.)*/, "$2-$3");
-                                    if (issn.length > 0) {
-                                        try {
-                                            var ses = new OpenSRF.ClientSession('open-ils.resolver');
-                                            var req = ses.request('open-ils.resolver.resolve_holdings.raw', 'issn', issn, 'http://sfx.scholarsportal.info/algoma');
-                                            req.oncomplete = function(r) {
-                                                var resolverInfo = "";
-                                                dojo.forEach(r.recv().content(), function(entry) {
-                                                    resolverInfo = entry.public_name + "_" + entry.target_coverage;
-                                                    if (title_list.indexOf(this_title_id) == -1) {
-                                                        url_list = "";
-                                                    }
-                                                    if (url_list.indexOf(resolverInfo) == -1) {
-                                                        var resolverNode = null;
-                                                        dojo.query('.recid').forEach(function(recinfo) {
-                                                            if (parseFloat(dojo.trim(BT.textContent(recinfo))) == parseFloat(this_title_id)) {
-                                                                resolverNode = recinfo;
-                                                            }
-                                                        });
-                                                        url_list += resolverInfo;
-                                                        var output = null;
-                                                        if (resolverNode != null) {
-                                                            var parent = resolverNode.parentNode;
-                                                            if (parent) {
-                                                                parent = parent.parentNode;
-                                                            }
-                                                            if (parent) {
-                                                                dojo.removeClass(parent,'hide_me');
+                                    var this_title_id;
+                                
+                                    dojo.query('datafield[tag="901"] subfield[code="c"]', item).forEach(function (item) {
+                                        this_title_id = dojo.trim(BT.textContent(item));
+                                    });
+
+                                    dojo.query('datafield[tag="022"] subfield', item).forEach(function(item) {
+                                        var issn = '';
+                                        issn = BT.textContent(item) + '';
+                                        issn = issn.replace(/^(\s|.)*?(\d{4}).(\d{3,4}[xX]?)(\s|.)*/, "$2-$3");
+                                        if (issn.length > 0) {
+                                            try {
+                                                var ses = new OpenSRF.ClientSession('open-ils.resolver');
+                                                var req = ses.request('open-ils.resolver.resolve_holdings.raw',
+                                                    'issn', issn, 'http://sfx.scholarsportal.info/algoma');
+                                                req.oncomplete = function(r) {
+                                                    var resolverInfo = "";
+                                                    dojo.forEach(r.recv().content(), function(entry) {
+                                                        resolverInfo = entry.public_name + "_" + entry.target_coverage;
+                                                        if (title_list.indexOf(this_title_id) == -1) {
+                                                            url_list = "";
+                                                        }
+                                                        if (url_list.indexOf(resolverInfo) == -1) {
+                                                            var resolverNode = null;
+                                                            dojo.query('.recid').forEach(function(recinfo) {
+                                                                if (parseFloat(dojo.trim(BT.textContent(recinfo))) == parseFloat(this_title_id)) {
+                                                                    resolverNode = recinfo;
+                                                                }
+                                                            });
+                                                            url_list += resolverInfo;
+                                                            var output = null;
+                                                            if (resolverNode != null) {
+                                                                var parent = resolverNode.parentNode;
+                                                                if (parent) {
+                                                                    parent = parent.parentNode;
+                                                                }
+                                                                if (parent) {
+                                                                    dojo.removeClass(parent,'hide_me');
+                                                                }
+                                                                output = dojo.create('div',{"style":"background-color:#EEFFEE;"},resolverNode,"last");
+                                                                dojo.addClass(output,"result_table_sfx_cell");
+                                                                title_list += this_title_id;
+                                                                var link = dojo.create('a',  {"style": "margin-left: 1em;", "class":"search_link", "href":  entry.target_url});
+                                                                var link_text = dojo.doc.createTextNode( entry.public_name);
+                                                                link.appendChild(link_text);
+                                                                output.appendChild(link);
+                                                                var coverage_text = dojo.doc.createTextNode(' - ' + entry.target_coverage
+                                                                        + (entry.target_embargo ? (' / ' + entry.target_embargo) : ''));
+                                                                output.appendChild(coverage_text);
+                                                                resolved[this_title_id] = true;
                                                             }
-                                                            output = dojo.create('div',{"style":"background-color:#EEFFEE;"},resolverNode,"last");
-                                                            dojo.addClass(output,"result_table_sfx_cell");
-                                                            title_list += this_title_id;
-                                                            var link = dojo.create('a',  {"style": "margin-left: 1em;", "class":"search_link", "href":  entry.target_url});
-                                                            var link_text = dojo.doc.createTextNode( entry.public_name);
-                                                            link.appendChild(link_text);
-                                                            output.appendChild(link);
-                                                            var coverage_text = dojo.doc.createTextNode(' - ' + entry.target_coverage
-                                                                    + (entry.target_embargo ? (' / ' + entry.target_embargo) : ''));
-                                                            output.appendChild(coverage_text);
-                                                            resolved[this_title_id] = true;
                                                         }
-                                                    }
-                                                });
-                                            };
-                                            req.send();
-                                        } catch (err) { alert(err.message);}
-                                    }
+                                                    });
+                                                };
+                                                req.send();
+                                            } catch (err) { alert(err.message);}
+                                        }
+                                    });
                                 ]]></span>
+
                                 </span>
                                 <!-- Prevent records with dozens of items attached from filling the screen -->
                                 <span type='opac/slot-data+marcxml-full' query='volumes'>
 
                                         var output = dojo.create('span'); 
                                         dojo.query('volumes volume uris uri', item).forEach(function(xitem) {
-                                            var this_title_id = curr_title_id;
                                             if (resolved[this_title_id]) { return; }
                                             var uri = new Object;
                                             uri.href = xitem.getAttribute('href');
         config.names.result.format_pic = 'format_pic'
         var url_list = "";
         var title_list = "";
-        var curr_title_id = "";
         var resolved = {};
     </script>
 
index facce53..9619f4f 100644 (file)
@@ -1145,7 +1145,7 @@ function rdetailCheckForGBPreview() {
 function searchForGBPreview( isbn ) {
        dojo.require("dojo.io.script");
        dojo.io.script.get({"url": "https://www.google.com/jsapi"});
-       dojo.io.script.get({"url": "http://books.google.com/books", "content": { "bibkeys": isbn, "jscmd": "viewapi", "callback": "GBPreviewCallback"}});
+       dojo.io.script.get({"url": "https://books.google.com/books", "content": { "bibkeys": isbn, "jscmd": "viewapi", "callback": "GBPreviewCallback"}});
 }
 
 /**
index 11bb920..6b61745 100644 (file)
@@ -719,7 +719,7 @@ function fetchGoogleBooksLink () {
         var scriptElement = document.createElement("script");
         scriptElement.setAttribute("id", "jsonScript");
         scriptElement.setAttribute("src",
-            "http://books.google.com/books?bibkeys=" + 
+            "https://books.google.com/books?bibkeys=" + 
             escape(isbnList) + "&jscmd=viewapi&callback=unhideGoogleBooksLink");
         scriptElement.setAttribute("type", "text/javascript");
         // make the request to Google Book Search
index 4d65a34..c1a5e77 100644 (file)
 
                             <tr name="local_callnumber_list" class="result_table_title_cell">
                                 <td>
-                                <!--
-                                    we snag the record id from the 901 field, and then use it
-                                    for lining up the resolver content
-                                -->
-                                <span 
-                                    type='opac/slot-data' query='datafield[tag="901"] subfield[code="c"]' class='hide_me'>
+                                <span type='opac/slot-data' query='record' class='hide_me'>
                                 <span class='hide_me' debug='true' type='opac/slot-format'><![CDATA[
-                                    curr_title_id = dojo.trim(BT.textContent(item));
-                                ]]></span>
-                                </span>
-                                <!--
-                                    this is very close to the layout in rdetail, we need to find the
-                                    record id in order to place the resolver info in the right spot
-                                -->
-                                <span 
-                                    type='opac/slot-data' query='datafield[tag="022"] subfield' class='hide_me'>
-                                <span class='hide_me' debug='true' type='opac/slot-format'><![CDATA[
-                                    var this_title_id = curr_title_id;
-                                    var issn = '';
-                                    issn = BT.textContent(item) + '';
-                                    issn = issn.replace(/^(\s|.)*?(\d{4}).(\d{3,4}[xX]?)(\s|.)*/, "$2-$3");
-                                    if (issn.length > 0) {
-                                        try {
-                                            var ses = new OpenSRF.ClientSession('open-ils.resolver');
-                                            var req = ses.request('open-ils.resolver.resolve_holdings.raw', 'issn', issn);
-                                            req.oncomplete = function(r) {
-                                                var resolverInfo = "";
-                                                dojo.forEach(r.recv().content(), function(entry) {
-                                                    resolverInfo = entry.public_name + "_" + entry.target_coverage;
-                                                    if (title_list.indexOf(this_title_id) == -1) {
-                                                        url_list = "";
-                                                    }
-                                                    if (url_list.indexOf(resolverInfo) == -1) {
-                                                        var resolverNode = null;
-                                                        dojo.query('.recid').forEach(function(recinfo) {
-                                                            if (parseFloat(dojo.trim(BT.textContent(recinfo))) == parseFloat(this_title_id)) {
-                                                                resolverNode = recinfo;
-                                                            }
-                                                        });
-                                                        url_list += resolverInfo;
-                                                        var output = null;
-                                                        if (resolverNode != null) {
-                                                            var parent = resolverNode.parentNode;
-                                                            if (parent) {
-                                                                parent = parent.parentNode;
-                                                            }
-                                                            if (parent) {
-                                                                dojo.removeClass(parent,'hide_me');
+                                    var this_title_id;
+                                
+                                    dojo.query('datafield[tag="901"] subfield[code="c"]', item).forEach(function (item) {
+                                        this_title_id = dojo.trim(BT.textContent(item));
+                                    });
+
+                                    dojo.query('datafield[tag="022"] subfield', item).forEach(function(item) {
+                                        var issn = '';
+                                        issn = BT.textContent(item) + '';
+                                        issn = issn.replace(/^(\s|.)*?(\d{4}).(\d{3,4}[xX]?)(\s|.)*/, "$2-$3");
+                                        if (issn.length > 0) {
+                                            try {
+                                                var ses = new OpenSRF.ClientSession('open-ils.resolver');
+                                                var req = ses.request('open-ils.resolver.resolve_holdings.raw',
+                                                    'issn', issn, 'http://sfx.scholarsportal.info/laurentian');
+                                                req.oncomplete = function(r) {
+                                                    var resolverInfo = "";
+                                                    dojo.forEach(r.recv().content(), function(entry) {
+                                                        resolverInfo = entry.public_name + "_" + entry.target_coverage;
+                                                        if (title_list.indexOf(this_title_id) == -1) {
+                                                            url_list = "";
+                                                        }
+                                                        if (url_list.indexOf(resolverInfo) == -1) {
+                                                            var resolverNode = null;
+                                                            dojo.query('.recid').forEach(function(recinfo) {
+                                                                if (parseFloat(dojo.trim(BT.textContent(recinfo))) == parseFloat(this_title_id)) {
+                                                                    resolverNode = recinfo;
+                                                                }
+                                                            });
+                                                            url_list += resolverInfo;
+                                                            var output = null;
+                                                            if (resolverNode != null) {
+                                                                var parent = resolverNode.parentNode;
+                                                                if (parent) {
+                                                                    parent = parent.parentNode;
+                                                                }
+                                                                if (parent) {
+                                                                    dojo.removeClass(parent,'hide_me');
+                                                                }
+                                                                output = dojo.create('div',{"style":"background-color:#EEFFEE;"},resolverNode,"last");
+                                                                dojo.addClass(output,"result_table_sfx_cell");
+                                                                title_list += this_title_id;
+                                                                var link = dojo.create('a',  {"style": "margin-left: 1em;", "class":"search_link", "href":  entry.target_url});
+                                                                var link_text = dojo.doc.createTextNode( entry.public_name);
+                                                                link.appendChild(link_text);
+                                                                output.appendChild(link);
+                                                                var coverage_text = dojo.doc.createTextNode(' - ' + entry.target_coverage
+                                                                        + (entry.target_embargo ? (' / ' + entry.target_embargo) : ''));
+                                                                output.appendChild(coverage_text);
+                                                                resolved[this_title_id] = true;
                                                             }
-                                                            output = dojo.create('div',{"style":"background-color:#EEFFEE;"},resolverNode,"last");
-                                                            dojo.addClass(output,"result_table_sfx_cell");
-                                                            title_list += this_title_id;
-                                                            var link = dojo.create('a',  {"style": "margin-left: 1em;", "class":"search_link", "href":  entry.target_url});
-                                                            var link_text = dojo.doc.createTextNode( entry.public_name);
-                                                            link.appendChild(link_text);
-                                                            output.appendChild(link);
-                                                            var coverage_text = dojo.doc.createTextNode(' - ' + entry.target_coverage
-                                                                    + (entry.target_embargo ? (' / ' + entry.target_embargo) : ''));
-                                                            output.appendChild(coverage_text);
-                                                            resolved[this_title_id] = true;
                                                         }
-                                                    }
-                                                });
-                                            };
-                                            req.send();
-                                        } catch (err) { alert(err.message);}
-                                    }
+                                                    });
+                                                };
+                                                req.send();
+                                            } catch (err) { alert(err.message);}
+                                        }
+                                    });
                                 ]]></span>
+
                                 </span>
                                 <!-- Prevent records with dozens of items attached from filling the screen -->
                                 <span type='opac/slot-data+marcxml-full' query='volumes'>
 
                                         var output = dojo.create('span'); 
                                         dojo.query('volumes volume uris uri', item).forEach(function(xitem) {
-                                            var this_title_id = curr_title_id;
                                             if (resolved[this_title_id]) { return; }
                                             var uri = new Object;
                                             uri.href = xitem.getAttribute('href');
         config.names.result.format_pic = 'format_pic'
         var url_list = "";
         var title_list = "";
-        var curr_title_id = "";
         var resolved = {};
     </script>