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 GBExtrasActivate(true);
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);
68 function GBExtrasActivate (init) {
69 var extras = document.getElementById('gbp_extra_links').getElementsByTagName('a');
70 for (var i = 0; i < extras.length; i++) {
72 extras[i].addEventListener('click', GBDisplayPreview);
74 extras[i].removeEventListener('click', GBDisplayPreview);
75 extras[i].addEventListener('click', GBShowHidePreview);
81 * This is called when the user clicks on the 'Preview' link. We assume
82 * a preview is available from Google if this link was made visible.
84 function GBDisplayPreview () {
85 var GBPreviewPane = document.getElementById('rdetail_preview_div');
86 if (GBPreviewPane === null || typeof GBPreviewPane.loaded === 'undefined' || GBPreviewPane.loaded === 'false') {
87 GBPreviewPane = document.createElement('div');
88 GBPreviewPane.id = 'rdetail_preview_div';
89 GBPreviewPane.style.height = document.documentElement.clientHeight + 'px';
90 GBPreviewPane.style.width = document.documentElement.clientWidth + 'px';
91 GBPreviewPane.style.display = 'block';
92 var GBClear = document.createElement('div');
93 GBClear.style.padding = '1em';
94 document.getElementById('gbp_extra_container').appendChild(GBPreviewPane);
95 document.getElementById('gbp_extra_container').appendChild(GBClear);
96 google.books.load({'language': lang});
97 window.setTimeout(GBPViewerLoadCallback, 750);
98 GBPreviewPane.loaded = 'true';
101 document.location.hash = '#gbp_extra';
104 function GBShowHidePreview () {
105 if (!GBPreviewShowing) {
106 document.getElementById('gbp_extra_container').style.display = 'inherit';
107 document.getElementById('gbp_arrow_link').style.display = 'none';
108 document.getElementById('gbp_arrow_down_link').style.display = 'inline';
109 GBPreviewShowing = true;
110 document.location.hash = '#gbp_extra';
111 } else { // button can open, but shouldn't close
112 document.getElementById('gbp_extra_container').style.display = 'none';
113 document.getElementById('gbp_arrow_link').style.display = 'inline';
114 document.getElementById('gbp_arrow_down_link').style.display = 'none';
115 GBPreviewShowing = false;
116 document.location.hash = 'rdetail_title';
120 function GBLoader () {
121 var spans = document.body.querySelectorAll('li.rdetail_isbns span.rdetail_value');
122 for (var i = 0; i < spans.length; i++) {
123 var prop = spans[i].getAttribute('property');
127 var isbn = spans[i].textContent || spans[i].innerText
131 isbn = isbn.toString().replace(/^\s+/, '');
132 var idx = isbn.indexOf(' ');
134 isbn = isbn.substring(0, idx);
136 isbn = isbn.toString().replace(/-/g, '');
143 if (GBisbns.length) {
144 var req = new window.XMLHttpRequest();
145 var qisbn = encodeURIComponent('isbn:' + GBisbns[0]);
146 req.open('GET', 'https://www.googleapis.com/books/v1/volumes?q=' + qisbn + '&prettyPrint=false');
147 if (req.responseType && (req.responseType = 'json')) {
148 req.onload = function (evt) {
149 var result = req.response;
151 GBPreviewCallback(result);
156 req.onload = function (evt) {
157 var result = JSON.parse(req.responseText);
159 GBPreviewCallback(result);
168 if (window.addEventListener && !window.XDomainRequest) {
169 window.addEventListener('load', GBLoader, false);