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