5 var GBPreviewLink = '';
6 var GBPreviewShowing = false;
7 var lang = '[% ctx.locale.substr(0,2) %]';
8 var head = document.getElementsByTagName('head')[0];
11 * This function is the call-back function for the JSON scripts which
12 * executes a Google book search response.
14 * @param {JSON} GBPBookInfo is the JSON object pulled from the Google books service.
16 function GBPreviewCallback (GBPBookInfo) {
17 if (GBPBookInfo.totalItems < 1) {
21 var accessInfo = GBPBookInfo.items[0].accessInfo;
26 if (accessInfo.embeddable) {
27 GBPreviewLink = GBPBookInfo.items[0].volumeInfo.previewLink;
31 if (document.location.protocol === 'https:') {
32 GBPreviewLink = GBPreviewLink.replace(/^http:/, 'https:');
34 var gbsrc = '//www.google.com/books/jsapi.js';
35 if (!head.querySelector('script[src="' + gbsrc + '"]')) {
36 var GBjsapi = document.createElement('script');
38 head.appendChild(GBjsapi);
40 /* Add a button below the book cover image to load the preview. */
41 var GBPBadge = document.createElement('img');
42 GBPBadge.id = 'gbpbadge';
43 GBPBadge.src = 'https://www.google.com/intl/' + lang + '/googlebooks/images/gbs_preview_button1.gif';
44 GBPBadge.title = document.getElementById('rdetail_title').innerHTML;
45 GBPBadge.style.border = 0;
46 GBPBadge.style.margin = '0.5em 0 0 0';
47 GBPBadgelink = document.createElement('a');
48 GBPBadgelink.id = 'gbpbadge_link';
49 GBPBadgelink.addEventListener('click', GBDisplayPreview);
50 GBPBadgelink.appendChild(GBPBadge);
51 document.getElementById('rdetail_title_div').appendChild(GBPBadgelink);
52 document.getElementById('gbp_extra').style.display = 'block';
56 function GBPViewerLoadCallback () {
57 var GBPViewer = new google.books.DefaultViewer(document.getElementById('rdetail_preview_div'));
58 GBPViewer.load(GBPreviewLink);
60 GBPBadgelink = document.getElementById('gbpbadge_link');
61 GBPBadgelink.removeEventListener('click', GBDisplayPreview);
62 GBPBadgelink.addEventListener('click', GBShowHidePreview);
66 * This is called when the user clicks on the 'Preview' link. We assume
67 * a preview is available from Google if this link was made visible.
69 function GBDisplayPreview () {
70 var GBPreviewPane = document.getElementById('rdetail_preview_div');
71 if (GBPreviewPane === null || typeof GBPreviewPane.loaded === 'undefined' || GBPreviewPane.loaded === 'false') {
72 GBPreviewPane = document.createElement('div');
73 GBPreviewPane.id = 'rdetail_preview_div';
74 GBPreviewPane.style.height = '800px';
75 GBPreviewPane.style.width = '600px';
76 GBPreviewPane.style.display = 'block';
77 var GBClear = document.createElement('div');
78 GBClear.style.padding = '1em';
79 document.getElementById('gbp_extra_container').appendChild(GBPreviewPane);
80 document.getElementById('gbp_extra_container').appendChild(GBClear);
81 google.books.load({'language': lang});
82 window.setTimeout(GBPViewerLoadCallback, 750);
83 var extras = document.getElementById('gbp_extra_links').getElementsByTagName('a');
84 for (var i = 0; i < extras.length; i++) {
85 extras[i].addEventListener('click', GBShowHidePreview);
87 GBPreviewPane.loaded = 'true';
90 document.location.hash = '#gbp_extra';
93 function GBShowHidePreview () {
94 if (!GBPreviewShowing) {
95 document.getElementById('gbp_extra_container').style.display = 'inherit';
96 document.getElementById('gbp_arrow_link').style.display = 'none';
97 document.getElementById('gbp_arrow_down_link').style.display = 'inline';
98 GBPreviewShowing = true;
99 document.location.hash = '#gbp_extra';
100 } else { // button can open, but shouldn't close
101 document.getElementById('gbp_extra_container').style.display = 'none';
102 document.getElementById('gbp_arrow_link').style.display = 'inline';
103 document.getElementById('gbp_arrow_down_link').style.display = 'none';
104 GBPreviewShowing = false;
105 document.location.hash = 'rdetail_title';
109 function GBLoader () {
110 var spans = document.body.querySelectorAll('li.rdetail_isbns span.rdetail_value');
111 for (var i = 0; i < spans.length; i++) {
112 var prop = spans[i].getAttribute('property');
116 var isbn = spans[i].textContent || spans[i].innerText
120 isbn = isbn.toString().replace(/^\s+/, '');
121 var idx = isbn.indexOf(' ');
123 isbn = isbn.substring(0, idx);
125 isbn = isbn.toString().replace(/-/g, '');
132 if (GBisbns.length) {
133 var req = new window.XMLHttpRequest();
134 var qisbn = encodeURIComponent('isbn:' + GBisbns[0]);
135 req.open('GET', 'https://www.googleapis.com/books/v1/volumes?q=' + qisbn + '&prettyPrint=false');
136 if (req.responseType && (req.responseType = 'json')) {
137 req.onload = function (evt) {
138 var result = req.response;
140 GBPreviewCallback(result);
145 req.onload = function (evt) {
146 var result = JSON.parse(req.responseText);
148 GBPreviewCallback(result);
157 if (window.addEventListener && !window.XDomainRequest) {
158 window.addEventListener('load', GBLoader, false);