Realtime Wikipedia description lookups
authorDan Scott <dscott@laurentian.ca>
Tue, 19 Sep 2017 02:14:04 +0000 (22:14 -0400)
committerDan Scott <dscott@laurentian.ca>
Sat, 24 Feb 2018 16:08:29 +0000 (11:08 -0500)
These are English-only but provide the first sentence of the Wikipedia
description of the performer, as well as a link to the related Wikipedia page
via the WP icon.

We also remove the non-functioning toggle code and generate unique DOM IDs for
each of the musicians.

Signed-off-by: Dan Scott <dscott@laurentian.ca>
Open-ILS/web/js/ui/default/opac/wikidata_music_card.js
test_wikidata.html [new file with mode: 0644]

index 35b06ad..a71a334 100644 (file)
@@ -23,6 +23,7 @@
    */
   var icon_node;
   var note;
+  var img;
   var wd;
 
   /* Ensure this is a musical recording */
       /* Insert clickable icon here */
       icon_node = node.querySelector('span[property="description"]');
       if (icon_node) {
-        note = document.createElement('span');
-        note.class = 'wikidata';
-        note.innerText = ' ♪';
-        note.addEventListener('click', perform, { once: true });
-        icon_node.insertBefore(note, null);
+        img = document.createElement('img');
+        img.src = 'https://www.wikidata.org/static/favicon/wikidata.ico';
+        img.alt = 'Show data from Wikidata';
+        img.class = 'wikidata';
+        img.style.width = '1em';
+        img.style.paddingLeft = '0.5em';
+        img.style.verticalAlign = 'middle';
+        img.addEventListener('click', perform, { once: true });
+        node.insertBefore(img, icon_node.nextSibling);
       }
     }
   }
   }
 
   function perform(e) {
-    var entity_name = getContribName(this.parentNode.parentNode);
+    var entity_name = getContribName(this.parentNode);
     findPerformer(icon_node, entity_name);
     e.preventDefault();
     e.stopPropagation();
   }
 
-  function toggleMode(el) {
-    wd = document.getElementById('magic_musician');
-    wd.style.display = 'inherit';
-    el.addEventListener('click', toggle);
-  }
-
-  function toggle(e) {
-    wd = document.getElementById('magic_musician');
-    
-    if (wd.style.display === 'inherit') {
-      wd.style.display = 'none';
-    } else {
-      wd.style.display = 'inherit';
-    }
-    e.preventDefault();
-    e.stopPropagation();
-  }
-
   function findPerformer(icon_node, entity_name) {
     var url = 'https://query.wikidata.org/sparql';
     var query = 'SELECT DISTINCT ?item ?itemLabel ?itemDescription ?image ?instrumentLabel ?birthPlace ?birthPlaceLabel ' +
-        '?website ?musicbrainz ?songKick ?twitter ?facebook ' +
+        '?website ?musicbrainz ?songKick ?twitter ?facebook ?wplink ' +
         'WHERE { ' +
         '?item rdfs:label|skos:altLabel|wdt:P1449 "' + entity_name + '"@en . ' +
-        '{ ?item wdt:P31 wd:Q215380 . } ' + // band
+        '{ ?item wdt:P31/wdt:P279* wd:Q215380 . } ' + // band
         'UNION ' +
         '{ ?item wdt:P31 wd:Q5741069 . } ' + // rock band
         'UNION ' +
         'OPTIONAL { ?item wdt:P2002 ?twitter } . ' +
         'OPTIONAL { ?item wdt:P2013 ?facebook } . ' +
         'OPTIONAL { ?item wdt:P18 ?image } . ' +
+        'OPTIONAL { ' +
+          '?wplink schema:about ?item . ' +
+          '?wplink schema:inLanguage "en" . ' +
+          '?wplink schema:isPartOf <https://en.wikipedia.org/> . ' +
+        '} ' +
         'SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } ' +
     '} ' +
     'LIMIT 10';
         var r = req.response.results.bindings[0];
         if (r !== undefined) {
           generateCard(icon_node, r);
-          toggleMode(note);
           // console.log(r);
         }
       }
         var r = JSON.parse(req.responseText).results.bindings[0];
         if (r !== undefined) {
           generateCard(icon_node, r);
-          toggleMode(note);
           // console.log(r);
         }
       }
     req.send();
   }
 
+  function addWikipedia(musician, r) {
+    var wpapi = 'https://en.wikipedia.org/w/api.php?origin=*&format=json&action=query&prop=extracts&explaintext=true&exintro=true&titles=';
+    var wplink = r.wplink.value;
+    // Strip the WP title from the link
+    wptitle = wplink.substring(wplink.lastIndexOf('/') + 1);
+
+    var req = new window.XMLHttpRequest();
+    req.open('GET', wpapi + wptitle);
+    req.onload = function (evt) {
+      var r = JSON.parse(req.response);
+      var k = Object.getOwnPropertyNames(r.query.pages)[0];
+      var description = r.query.pages[k].extract;
+
+      // Just the first line will do
+      var linefeed = description.indexOf('\n');
+      var period = description.indexOf('. ');
+      if (linefeed > 0) {
+        description = description.substring(0, linefeed);
+      } else if (period > 0) {
+        description = description.substring(0, period + 1);
+      }
+      var wdd = document.createElement('div');
+      wdd.style['margin-top'] = '1em';
+      var wpa = document.createElement('a');
+      wpa.href = wplink;
+
+      // Link to Wikipedia via their icon
+      var img = document.createElement('img');
+      img.src = 'https://en.wikipedia.org/static/favicon/wikipedia.ico';
+      img.alt = 'View on Wikipedia';
+      img.class = 'wikidata';
+      img.style.width = '1em';
+      img.style.paddingLeft = '0.5em';
+
+      wpa.appendChild(img);
+      wdd.innerText = description;
+      wdd.appendChild(wpa);
+      musician.appendChild(wdd);
+    }
+    req.send();
+  }
+
   function generateCard(icon_node, r) {
     var auth_div = document.querySelector('div[class="rdetail_authors_div"]');
     var musician = document.createElement('div');
-    musician.id = 'magic_musician';
+    var uri = r.item.value;
+    var wdid = uri.substr(uri.lastIndexOf('/') + 1);
+    musician.id = 'musician_' + wdid;
     musician.style.padding = '0.5em 1em 1em 1em';
     musician.style.border = 'thin blue solid';
     musician.style.overflow = 'hidden';
       musician.appendChild(wdd);
     }
 
+    // Get the description from Wikipedia
+    if (r.hasOwnProperty('wplink')) {
+      addWikipedia(musician, r);
+    }
+
     function addWDValue(property, propertyLabel, label, isLink, linkFormatter) {
       var value = '';
       if (r.hasOwnProperty(property)) {
     addWDValue('twitter', 'Twitter: ', null, true, function(value) { return 'https://twitter.com/' + value });
     addWDValue('facebook', 'Facebook: ', null, true, function(value) { return 'https://www.facebook.com/' + value });
 
-    var uri = r.item.value;
     var wd = document.createElement('div');
     var wdl = document.createElement('label');
     wdl.innerText = 'Edit on Wikidata: ';
     var wdv = document.createElement('a');
     wdv.href = uri;
-    wdv.innerText = uri.substr(uri.lastIndexOf('/') + 1);
+    wdv.innerText = wdid;
     wd.appendChild(wdl);
     wd.appendChild(wdv);
     musician.appendChild(wd);
diff --git a/test_wikidata.html b/test_wikidata.html
new file mode 100644 (file)
index 0000000..3383a22
--- /dev/null
@@ -0,0 +1,331 @@
+
+
+<!DOCTYPE html>
+<html lang='en-us'>
+    <head prefix="og: http://ogp.me/ns#">
+        <meta charset="utf-8" />
+        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+        <meta name = "viewport" content = "initial-scale = 1.0">
+        <title>               The 1985 Juno Awards collection - Laurentian University</title>
+        <link rel="unapi-server" type="application/xml" title="unAPI" href="/opac/extras/unapi" />
+        <link type="application/opensearchdescription+xml" rel='search' title="Laurentian University OpenSearch" href="/opac/extras/opensearch/1.1/LUSYS/-/osd.xml" />
+        <link rel="canonical" href="https://laurentian.concat.ca/eg/opac/record/349295" />
+<meta property="og:url" content="https://laurentian.concat.ca/eg/opac/record/349295" />
+<meta property="og:type" content="http://schema.org/MusicAlbum" />
+<meta property="og:image" content="https://laurentian.concat.ca/opac/extras/ac/jacket/large/r/349295" />
+<meta property="og:title" content="The 1985 Juno Awards collection" />
+<meta property="og:site_name" content="Laurentian University" />
+        
+    </head>
+    <body class="tundra">
+        <h1 class="sr-only">Catalog</h1>
+        
+        
+<div id="header-wrap">
+<div id="header">
+    <div class="float-left">
+               <div id="topnav_logo"><a href="http://laurentian.ca" title="Laurentian University"><img alt="Laurentian University logo" 
+            src="https://laurentian.concat.ca/images/lul_logo_small.png" /></a></div>
+
+    </div>
+    <div class="float-right">
+        
+        <div id="your-acct-login">
+            <a href="/eg/opac/myopac/main" 
+                class="opac-button opac-button-header" id="home_myopac_link">
+                My Account
+            </a>
+        </div>
+        
+    </div>
+<form id="locale_picker_form" action="/eg/opac/record/349295" method="post">
+    <label for="locale_picker">Language:</label>    <select id="locale_picker" name="set_eg_locale">
+        <option value="en_us" selected="selected">English (US)</option>
+        <option value="fr_ca" >Français (Canada)</option>
+    </select>
+    <input type="submit" value="Change" />
+</form>
+
+    <div class="common-no-pad"></div>
+</div>
+</div>
+<div id="gold-links-holder">
+    <div id="gold-links">
+        <div id="header-links">
+            <a href="http://laurentian.ca/library">Library Home</a>
+            <a href="http://sfx.scholarsportal.info/laurentian/az">Electronic Journals (A-Z)</a>
+            <a href="http://biblio.laurentian.ca/research/guides">Databases</a>
+            <a href="http://biblio.laurentian.ca/research/guides/archives">Archives</a>
+            <a href="http://biblio.laurentian.ca/reserves/">Course Reserves</a>
+            <a href="https://biblio.laurentian.ca/research/contact-us">Contact Us</a>
+        </div>
+    </div>
+</div>
+
+
+    <h2 class="sr-only">Record Details</h2>
+    <h3 class="sr-only">Catalog Search</h3>
+
+    <div id="content-wrapper" class="content-wrapper-record-page">
+        
+        <div id="main-content">
+            
+<div id='canvas_main' class='canvas' vocab="http://schema.org/" typeof='MusicAlbum Product' resource="#schemarecord">
+
+    
+<!-- ****************** rdetail_summary.xml ***************************** -->
+<abbr class="unapi-id" title='tag:laurentian.concat.ca,2017:biblio-record_entry/349295'></abbr>
+
+<hr />
+
+<div id="rdetail_summary_header">
+    <div id='rdetail_title_div'>
+        <h1 id='rdetail_title' property="name">The 1985 Juno Awards collection</h1>
+
+<div class='rdetail_authors_div'> <span class="rdetail-author-div" typeof="Person" property="contributor http://id.loc.gov/vocabulary/relators/sng" resource="#schemacontrib1"><a href="/eg/opac/results?query=Adams%20%20Bryan;qtype=author" rel="nofollow"><span resource="#schemacontrib1"><span property="name">Adams, Bryan </span></span></a> (<span property="description">Singer</span>). </span> <span class="rdetail-author-div" typeof="Person" property="contributor http://id.loc.gov/vocabulary/relators/sng" resource="#schemacontrib2"><a href="/eg/opac/results?qtype=author;query=Hart%20%20Corey" rel="nofollow"><span resource="#schemacontrib2"><span property="name">Hart, Corey </span></span></a> (<span property="description">Singer</span>). </span> <span class="rdetail-author-div" typeof="Person" property="contributor http://id.loc.gov/vocabulary/relators/sng" resource="#schemacontrib3"><a href="/eg/opac/results?query=Silver%20%20Liberty;qtype=author" rel="nofollow"><span resource="#schemacontrib3"><span property="name">Silver, Liberty </span></span></a> (<span property="description">Singer</span>). </span> <span class="rdetail-author-div" typeof="Person" property="contributor http://id.loc.gov/vocabulary/relators/sng" resource="#schemacontrib4"><a href="/eg/opac/results?qtype=author;query=McLauchlan%20%20Murray" rel="nofollow"><span resource="#schemacontrib4"><span property="name">McLauchlan, Murray </span></span></a> (<span property="description">Singer</span>). </span> <span class="rdetail-author-div" typeof="Person" property="contributor http://id.loc.gov/vocabulary/relators/itr" resource="#schemacontrib5"><a href="/eg/opac/results?qtype=author;query=Thompson%20%20Don" rel="nofollow"><span resource="#schemacontrib5"><span property="name">Thompson, Don </span></span></a> (<span property="description">Instrumentalist</span>). </span> <span class="rdetail-author-div" typeof="Person" property="contributor http://id.loc.gov/vocabulary/relators/sng" resource="#schemacontrib6"><a href="/eg/opac/results?query=Luba;qtype=author" rel="nofollow"><span resource="#schemacontrib6"><span property="name">Luba </span></span></a> (<span property="description">Singer</span>). </span> <span class="rdetail-author-div" typeof="Person" property="contributor http://id.loc.gov/vocabulary/relators/sng" resource="#schemacontrib7"><a href="/eg/opac/results?query=Janz%20%20Paul;qtype=author" rel="nofollow"><span resource="#schemacontrib7"><span property="name">Janz, Paul </span></span></a> (<span property="description">Singer</span>). </span> <span class="rdetail-author-div" typeof="Person" property="contributor http://id.loc.gov/vocabulary/relators/sng" resource="#schemacontrib8"><a href="/eg/opac/results?qtype=author;query=lang%20%20k%20d%20%20%20Kathryn%20Dawn%20%201961" rel="nofollow"><span resource="#schemacontrib8"><span property="name">lang, k.d. (Kathryn Dawn),</span> <span property="birthDate">1961</span>-</span></a> (<span property="description">Singer</span>). </span> <span class="rdetail-author-div" typeof="Organization" property="contributor http://id.loc.gov/vocabulary/relators/prf" resource="#schemacontrib9"><a href="/eg/opac/results?qtype=author;query=Idle%20Eyes" rel="nofollow"><span resource="#schemacontrib9"><span property="name">Idle Eyes </span></span></a> (<span property="description">Performer</span>). </span> <span class="rdetail-author-div" typeof="Organization" property="contributor http://id.loc.gov/vocabulary/relators/prf" resource="#schemacontrib10"><a href="/eg/opac/results?qtype=author;query=The%20Family%20Brown" rel="nofollow"><span resource="#schemacontrib10"><span property="name">The Family Brown </span></span></a> (<span property="description">Performer</span>). </span> <span class="rdetail-author-div" typeof="Organization" property="contributor http://id.loc.gov/vocabulary/relators/prf" resource="#schemacontrib11"><a href="/eg/opac/results?qtype=author;query=Parachute%20Club" rel="nofollow"><span resource="#schemacontrib11"><span property="name">Parachute Club </span></span></a> (<span property="description">Performer</span>). </span> <span class="rdetail-author-div" typeof="Organization" property="contributor http://id.loc.gov/vocabulary/relators/prf" resource="#schemacontrib12"><a href="/eg/opac/results?qtype=author;query=Oxford%20String%20Quartet" rel="nofollow"><span resource="#schemacontrib12"><span property="name">Oxford String Quartet </span></span></a> (<span property="description">Performer</span>). </span>
+</div>
+
+
+
+    </div>
+    <div id="rdetail_image_div">
+            <a href='https://laurentian.concat.ca/opac/extras/ac/jacket/large/r/349295'><img
+                    alt="Image of item" id='rdetail_image'
+                    src='https://laurentian.concat.ca/opac/extras/ac/jacket/medium/r/349295' />
+            </a>
+        <br />
+    </div>
+    <div id="format_actions">
+
+
+          
+              <img title="Phonograph music recording" 
+                  alt="Phonograph music recording" 
+                  src="https://laurentian.concat.ca/images/format_icons/icon_format/phonomusic.png?ee69f4" /> 
+              Phonograph music recording
+          
+
+        <div id="rdetail_actions_div">            <div class="rdetail_aux_utils toggle_list">
+        
+            
+                <a href="/eg/opac/mylist/add?record=349295" class="no-dec" rel="nofollow" vocab="">
+                    <img src="https://laurentian.concat.ca/images/clipboard.png?ee69f4" alt="" />
+                    Add to my list
+                </a>
+            
+        
+            </div>
+            <div class="rdetail_aux_utils toggle_list">
+                     
+                </div>
+                <div class="rdetail_aux_utils">
+                    <img src="https://laurentian.concat.ca/images/clipboard.png?ee69f4" alt="Print / Email Actions Image" />
+                    <a href="/eg/opac/record/print/349295" class="no-dec" rel="nofollow" vocab="">Print</a> /
+                    <a href="/eg/opac/record/email/349295" class="no-dec" rel="nofollow" vocab="">Email</a>
+                </div>
+            
+                <div class="rdetail_aux_utils share_record">
+                    <a href="/eg/opac/record/349295" class="no-dec">
+                         <img src="https://laurentian.concat.ca/images/link.png?ee69f4" alt="Permalink" />
+                         Permalink
+                    </a>
+                </div>
+            
+        </div>
+    </div>
+</div>
+
+<div id="copy_hold_counts"><span id="rdetail_copy_counts">
+    <h2>Available copies</h2>
+    <ul>
+    <li>
+    1 of 1 copy available at Conifer.
+    <a href="/eg/opac/record/349295?copy_depth=0"
+       title="Show copies at Conifer">(Show)</a>
+    </li>
+    <li>
+    1 of 1 copy available at Laurentian University.
+    </li>
+    </ul>
+</span>
+
+    <span id="rdetail_hold_counts">
+        <h2>Current holds</h2>
+        <p>
+            0 current holds with 1 total copy.
+        </p>
+    </span>
+<div id="metarecord_population">
+</div> <!-- metarecord_population -->
+<table class="table_no_border_space table_no_cell_pad table_no_border" width="100%" id="rdetails_status">
+    <thead>
+        <tr>
+                        <th scope='col'>Location</th>
+            <th scope='col'>Call Number / Copy Notes</th>
+            <th scope='col'>Barcode</th>
+            <th scope='col'>Shelving Location</th>
+            <th scope='col'>Status</th>
+            <th scope='col'>Due Date</th>
+        </tr>
+    </thead>
+    <tbody class="copy_details_table">        <tr class="copy_details_offers_row" property="offers" typeof="Offer"><td><a property="offeredBy" typeof="Library" href="/eg/opac/library/OSUL"><span property="name">J.N. Desmarais Library</span></a>
+                <link property="businessFunction" href="http://purl.org/goodrelations/v1#LeaseOut">
+                <meta property="price" content="0.00">
+            </td>
+            <td><span property="sku">LP 3689</span> </td>
+            <td property="serialNumber">
+                30007006013980                            </td>
+            <td property="availableAtOrFrom">Long-play records (3rd floor)</td>
+            
+            <td><link property="availability" href="http://schema.org/InStock" />Available</td>
+            <td>-</td>
+        </tr>
+
+        
+            
+        
+
+<tr><td>
+</td></tr>
+        <tr>
+        </tr>
+                <tr>
+            <td> 
+            </td>
+        </tr>
+    </tbody>
+</table>
+
+
+</div>
+
+<h2 id='rdetail_record_details'>Record details</h2>
+<ul>
+    <li id='rdetail_phys_desc'>
+        <strong class='rdetail_label'>Physical Description:</strong>
+        <span class='rdetail_value'>1 sound disc : 33 1/3 rpm, stereo</span>
+    </li>
+    <li id='rdetail_publisher'>
+        <strong class='rdetail_label'>Publisher:</strong>
+        <span class='rdetail_value' property="publisher" typeof="Organization">
+            <span property="location">Montréal, Qué. :</span>
+            <span property="name">Radio Canada International,</span>
+        </span>
+            <span property="datePublished">1986.</span>    </li>
+</ul>
+
+
+<h2 class='rdetail_contents'>Content descriptions</h2>
+<table class='rdetail_content'>
+    <tbody><tr>
+    <td class='rdetail_content_type'>Formatted Contents Note: </td>
+    <td class='rdetail_content_value' property='keywords'> Heaven / Adams -- Never surrender / Hart -- Lost somewhere inside your love / Silver -- Railroad man / McLauchlan -- Tokyo Rose / Idle Eyes -- I've never been in love before / Thompson -- Let it go / Luba -- Go to pieces / Janz -- Wouldn't you love us together again / The Family Brown -- At the feet of the moon / Parachute Club -- Pine and stew / lang -- Minuetto from Quartet in B flat major / Mozart.<br/></td>
+</tr>
+    </tbody>
+</table>
+
+
+
+
+<h2 class='rdetail_related_subjects'>Search for related items by subject</h2>
+        <table class='rdetail_subject'>
+            <tbody>
+                <tr>
+                    <td class='rdetail_subject_type'>Subject: </td>
+                    <td class='rdetail_subject_value'><span property="about"><a href="/eg/opac/results?query=Popular%20music;qtype=subject">Popular music</a>  &gt; <a href="/eg/opac/results?query=Popular%20music%20Canada.;qtype=subject">Canada.</a> <br/></span><span property="about"><a href="/eg/opac/results?query=String%20quartets.;qtype=subject">String quartets.</a> <br/></span><span property="about"><a href="/eg/opac/results?qtype=subject;query=Country%20music">Country music</a>  &gt; <a href="/eg/opac/results?query=Country%20music%20Canada.;qtype=subject">Canada.</a> <br/></span></td>
+                </tr>
+            </tbody>
+        </table>
+
+
+
+<div>
+    <div id='rdetail_extras_div' style='width: 100%;'> 
+        
+        <div id="gbp_extra" class="rdetail_extras hide_me">
+            <div class="rdetail_extras_hr"></div>
+            <div id="gbp_extra_links" class="rdetail_extras_link">
+                <a id='gbp_arrow_link' name='google_preview' href='javascript:GBDisplayPreview();' class='rdetail_extras_lbl'>&#9658;</a>
+                <a id='gbp_arrow_down_link' name='google_preview' href='javascript:GBDisplayPreview();' class='rdetail_extras_lbl hide_me'>&#9660;</a>
+                <a name='google_preview_lbl' href='javascript:GBDisplayPreview();' class="rdetail_extras_lbl">Google Preview</a></div>
+        </div>
+        <div id="gbp_extra_container" class='rdetail_extras_div'></div>
+        
+
+        
+        <div class="rdetail_extras">
+            <div class="rdetail_extras_hr"></div>
+            <div class="rdetail_extras_link">
+                
+                <a name='awards' href='/eg/opac/record/349295?expand=awards#awards' class="rdetail_extras_lbl" rel="nofollow" vocab="">&#9658; Awards, Reviews, &amp; Suggested Reads</a>
+            </div>
+        </div>
+        <div class='rdetail_extras_div'>
+            
+        </div>
+        
+        <div class="rdetail_extras">
+            <div class="rdetail_extras_hr"></div>
+            <div class="rdetail_extras_link">
+                
+                <a name='cnbrowse' href='/eg/opac/record/349295?expand=cnbrowse#cnbrowse' class="rdetail_extras_lbl" rel="nofollow" vocab="">&#9658; Shelf Browser</a>
+            </div>
+        </div>
+        <div class='rdetail_extras_div'>
+            
+        </div>
+        
+        <div class="rdetail_extras">
+            <div class="rdetail_extras_hr"></div>
+            <div class="rdetail_extras_link">
+                
+                <a name='marchtml' href='/eg/opac/record/349295?expand=marchtml#marchtml' class="rdetail_extras_lbl" rel="nofollow" vocab="">&#9658; MARC Record</a>
+            </div>
+        </div>
+        <div class='rdetail_extras_div'>
+            
+        </div>
+        
+    </div>
+</div>
+
+
+
+</div>
+
+            <div class="common-full-pad"></div>
+        </div>
+        <br class="clear-both" />
+    </div> 
+        <h2 class="sr-only">Additional Resources</h2>
+        <div id="footer-wrap">
+<div id="footer">
+    
+    <a href="http://laurentian.ca/library">Library Home</a> |
+    
+    <a href="http://sfx.scholarsportal.info/laurentian/az">Electronic Journals (A-Z)</a> |
+    <a href="http://biblio.laurentian.ca/research/guides">Databases</a> |
+    <a href="http://biblio.laurentian.ca/research/guides/archives">Archives</a> |
+    <a href="http://biblio.laurentian.ca/reserves/">Course Reserves</a> &nbsp;|&nbsp;
+    <a href="https://biblio.laurentian.ca/research/contact-us">Contact Us</a>
+    
+    <div id="copyright_text" style="margin-top: 2em;">
+        Copyright &copy; 2006-2017 Georgia Public Library Service, and others
+    </div>
+    <div id="footer_logo">
+        Powered by
+        <a href="http://evergreen-ils.org">
+            <img src="https://laurentian.concat.ca/opac/images/eg_tiny_logo.png"
+                style="border:none; width: 94px; height: 16px;"
+                alt="Evergreen"
+            />
+        </a>
+    </div>
+</div>
+</div>
+
+<script type="text/javascript" src="Open-ILS/web/js/ui/default/opac/wikidata_music_card.js"></script>
+
+    </body>
+</html>
+