5 var GBPreviewLink = '';
6 var GBPreviewShowing = false;
8 if (document.documentElement.lang) {
9 lang = document.documentElement.lang.substr(0,2) || 'en';
11 var head = document.getElementsByTagName('head')[0];
14 * This function is the call-back function for the JSON scripts which
15 * executes a Google book search response.
17 * @param {JSON} GBPBookInfo is the JSON object pulled from the Google books service.
19 function GBPreviewCallback (GBPBookInfo) {
20 if (GBPBookInfo.totalItems < 1) {
24 var accessInfo = GBPBookInfo.items[0].accessInfo;
29 if (accessInfo.embeddable) {
30 GBPreviewLink = GBPBookInfo.items[0].volumeInfo.previewLink;
34 if (document.location.protocol === 'https:') {
35 GBPreviewLink = GBPreviewLink.replace(/^http:/, 'https:');
37 var gbsrc = '//www.google.com/books/jsapi.js';
38 if (!head.querySelector('script[src="' + gbsrc + '"]')) {
39 var GBjsapi = document.createElement('script');
41 head.appendChild(GBjsapi);
43 /* Add a button below the book cover image to load the preview. */
44 var GBPBadge = document.createElement('img');
45 GBPBadge.id = 'gbpbadge';
46 GBPBadge.src = 'https://www.google.com/intl/' + lang + '/googlebooks/images/gbs_preview_button1.gif';
47 GBPBadge.title = document.getElementById('rdetail_title').innerHTML;
48 GBPBadge.style.border = 0;
49 GBPBadge.style.margin = '0.5em 0 0 0';
50 GBPBadgelink = document.createElement('a');
51 GBPBadgelink.id = 'gbpbadge_link';
52 GBPBadgelink.addEventListener('click', GBDisplayPreview);
53 GBPBadgelink.appendChild(GBPBadge);
54 document.getElementById('rdetail_title_div').appendChild(GBPBadgelink);
55 document.getElementById('gbp_extra').style.display = 'block';
59 function GBPViewerLoadCallback () {
60 var GBPViewer = new google.books.DefaultViewer(document.getElementById('rdetail_preview_div'));
61 GBPViewer.load(GBPreviewLink);
63 GBPBadgelink = document.getElementById('gbpbadge_link');
64 GBPBadgelink.removeEventListener('click', GBDisplayPreview);
65 GBPBadgelink.addEventListener('click', GBShowHidePreview);
69 * This is called when the user clicks on the 'Preview' link. We assume
70 * a preview is available from Google if this link was made visible.
72 function GBDisplayPreview () {
73 var GBPreviewPane = document.getElementById('rdetail_preview_div');
74 if (GBPreviewPane === null || typeof GBPreviewPane.loaded === 'undefined' || GBPreviewPane.loaded === 'false') {
75 GBPreviewPane = document.createElement('div');
76 GBPreviewPane.id = 'rdetail_preview_div';
77 GBPreviewPane.style.height = document.documentElement.clientHeight + 'px';
78 GBPreviewPane.style.width = document.documentElement.clientWidth + 'px';
79 GBPreviewPane.style.display = 'block';
80 var GBClear = document.createElement('div');
81 GBClear.style.padding = '1em';
82 document.getElementById('gbp_extra_container').appendChild(GBPreviewPane);
83 document.getElementById('gbp_extra_container').appendChild(GBClear);
84 google.books.load({'language': lang});
85 window.setTimeout(GBPViewerLoadCallback, 750);
86 var extras = document.getElementById('gbp_extra_links').getElementsByTagName('a');
87 for (var i = 0; i < extras.length; i++) {
88 extras[i].addEventListener('click', GBShowHidePreview);
90 GBPreviewPane.loaded = 'true';
93 document.location.hash = '#gbp_extra';
96 function GBShowHidePreview () {
97 if (!GBPreviewShowing) {
98 document.getElementById('gbp_extra_container').style.display = 'inherit';
99 document.getElementById('gbp_arrow_link').style.display = 'none';
100 document.getElementById('gbp_arrow_down_link').style.display = 'inline';
101 GBPreviewShowing = true;
102 document.location.hash = '#gbp_extra';
103 } else { // button can open, but shouldn't close
104 document.getElementById('gbp_extra_container').style.display = 'none';
105 document.getElementById('gbp_arrow_link').style.display = 'inline';
106 document.getElementById('gbp_arrow_down_link').style.display = 'none';
107 GBPreviewShowing = false;
108 document.location.hash = 'rdetail_title';
112 function GBLoader () {
113 var spans = document.body.querySelectorAll('li.rdetail_isbns span.rdetail_value');
114 for (var i = 0; i < spans.length; i++) {
115 var prop = spans[i].getAttribute('property');
119 var isbn = spans[i].textContent || spans[i].innerText
123 isbn = isbn.toString().replace(/^\s+/, '');
124 var idx = isbn.indexOf(' ');
126 isbn = isbn.substring(0, idx);
128 isbn = isbn.toString().replace(/-/g, '');
135 if (GBisbns.length) {
136 var req = new window.XMLHttpRequest();
137 var qisbn = encodeURIComponent('isbn:' + GBisbns[0]);
138 req.open('GET', 'https://www.googleapis.com/books/v1/volumes?q=' + qisbn + '&prettyPrint=false');
139 if (req.responseType && (req.responseType = 'json')) {
140 req.onload = function (evt) {
141 var result = req.response;
143 GBPreviewCallback(result);
148 req.onload = function (evt) {
149 var result = JSON.parse(req.responseText);
151 GBPreviewCallback(result);
160 if (window.addEventListener && !window.XDomainRequest) {
161 window.addEventListener('load', GBLoader, false);