Fix typo in CSS
[bookreader.git] / BookReaderIA / datanode / BookReaderJSIA.php
index 75db7d9..b5d9c18 100644 (file)
@@ -358,7 +358,7 @@ br.getEmbedURL = function(viewParams) {
         url += '/' + this.subPrefix;
     }
     url += '?ui=embed';
-    if (viewParams) {
+    if (typeof(viewParams) != 'undefined') {
         url += '#' + this.fragmentFromParams(viewParams);
     }
     return url;
@@ -367,15 +367,15 @@ br.getEmbedURL = function(viewParams) {
 // getEmbedCode
 //________
 // Returns the embed code HTML fragment suitable for copy and paste
-br.getEmbedCode = function() {
-    return "<iframe src='" + this.getEmbedURL() + "' width='480px' height='430px' frameborder='0' ></iframe>";
+br.getEmbedCode = function(frameWidth, frameHeight, viewParams) {
+    return "<iframe src='" + this.getEmbedURL(viewParams) + "' width='" + frameWidth + "' height='" + frameHeight + "' frameborder='0' ></iframe>";
 }
 
 // getOpenLibraryRecord
 br.getOpenLibraryRecord = function(callback) {
     // Try looking up by ocaid first, then by source_record
     
-    var jsonURL = 'http://openlibrary.org/query.json?type=/type/edition&*=&ocaid=' + br.bookId;
+    var jsonURL = this.olHost + '/query.json?type=/type/edition&*=&ocaid=' + br.bookId;
     $.ajax({
         url: jsonURL,
         success: function(data) {
@@ -383,7 +383,7 @@ br.getOpenLibraryRecord = function(callback) {
                 callback(br, data[0]);
             } else {
                 // try sourceid
-                jsonURL = 'http://openlibrary.org/query.json?type=/type/edition&*=&source_records=ia:' + br.bookId;
+                jsonURL = this.olHost + '/query.json?type=/type/edition&*=&source_records=ia:' + br.bookId;
                 $.ajax({
                     url: jsonURL,
                     success: function(data) {
@@ -404,8 +404,12 @@ br.buildInfoDiv = function(jInfoDiv) {
 
     var escapedTitle = BookReader.util.escapeHTML(this.bookTitle);
     var domainRe = /(\w+\.(com|org))/;
-    var domain = domainRe.exec(this.bookUrl)[1];
-        
+    var domainMatch = domainRe.exec(this.bookUrl);
+    var domain = this.bookUrl;
+    if (domainMatch) {
+        domain = domainMatch[1];
+    }
+       
     // $$$ cover looks weird before it loads
     jInfoDiv.find('.BRfloatCover').append([
                     '<div style="height: 140px; min-width: 80px; padding: 0; margin: 0;"><a href="', this.bookUrl, '"><img src="http://www.archive.org/download/', this.bookId, '/page/cover_t.jpg" alt="' + escapedTitle + '" height="140px" /></a></div>'].join('')
@@ -531,6 +535,9 @@ foreach ($metaData->xpath('//collection') as $collection) {
     }
 }
 
+#echo "br.olHost = 'http://openlibrary.org'\n";
+echo "br.olHost = 'http://ol-mang:8080'\n";
+
 if ($useOLAuth) {
     echo "br.olAuth = true;\n";
 } else {
@@ -564,20 +571,42 @@ if (typeof(brConfig) != 'undefined') {
 
 
 function OLAuth() {
-    this.authUrl = 'http://openlibrary.org/ia_auth/' + br.bookId;
+    this.authUrl = br.olHost + '/ia_auth/' + br.bookId;
     this.olConnect = false;
+    this.loanUUID = false;
+    this.loanToken = false;
+    
+    var cookieRe = /;\s*/;
+    var cookies = document.cookie.split(cookieRe);
+    var length = cookies.length;
+    var i;
+    for (i=0; i<length; i++) {
+        if (0 == cookies[i].indexOf('br-loan-' + br.bookId)) {
+            this.loanUUID = cookies[i].split('=')[1];
+        }
+        if (0 == cookies[i].indexOf('loan-' + br.bookId)) {
+            this.loanToken = cookies[i].split('=')[1];
+        }
+    }
+
     return this;
 }
 
 OLAuth.prototype.init = function() {
-    var htmlStr =  '<p style="text-align:center;"><b>Authenticating in-browser loan with openlibrary.org!</b></p>';
-    htmlStr    +=  '<p>Please wait...</p>';
+    var htmlStr =  'Checking loan status with Open Library';
 
-    this.showPopup("#ddd", "#000", htmlStr);
-    $.ajax({url:this.authUrl + '?rand='+Math.random(), dataType:'jsonp', jsonpCallback:'olAuth.initCallback'});
+    this.showPopup("#ddd", "#000", htmlStr, 'Please wait as we check the status of this book...');
+    var authUrl = this.authUrl+'?rand='+Math.random();
+    if (false !== this.loanUUID) {
+        authUrl += '&loan='+this.loanUUID
+    }
+    if (false !== this.loanToken) {
+        authUrl += '&token='+this.loanToken
+    }
+    $.ajax({url:authUrl, dataType:'jsonp', jsonpCallback:'olAuth.initCallback'});
 }
 
-OLAuth.prototype.showPopup = function(bgColor, textColor, msg) {
+OLAuth.prototype.showPopup = function(bgColor, textColor, msg, resolution) {
     this.popup = document.createElement("div");
     $(this.popup).css({
         position: 'absolute',
@@ -587,22 +616,27 @@ OLAuth.prototype.showPopup = function(bgColor, textColor, msg) {
         padding:  "20px",
         border:   "3px double #999999",
         zIndex:   3,
+        textAlign: 'center',
         backgroundColor: bgColor,
         color: textColor
     }).appendTo('#BookReader');
 
-    this.popup.innerHTML = msg;
+    this.setPopupMsg(msg, resolution);
 
 }
 
+OLAuth.prototype.setPopupMsg = function(msg, resolution) {
+    this.popup.innerHTML = ['<p><strong>', msg, '</strong></p><p>', resolution, '</p>'].join('\n');
+}
+
 OLAuth.prototype.initCallback = function(obj) {
     if (false == obj.success) {
         $(this.popup).css({
-            backgroundColor: "#f00",
-            color: "#fff"
+            backgroundColor: "#fff",
+            color: "#000"
         });
 
-        this.popup.innerHTML = obj.msg;
+        this.setPopupMsg(obj.msg, obj.resolution);
         return;
     }
     
@@ -615,7 +649,7 @@ OLAuth.prototype.initCallback = function(obj) {
 
 OLAuth.prototype.callback = function(obj) {
     if (false == obj.success) {
-        this.showPopup("#f00", "#fff", obj.msg);
+        this.showPopup("#fff", "#000", obj.msg, obj.resolution);
         clearInterval(this.poller);
         this.ttsPoller = null;
     } else {
@@ -626,27 +660,43 @@ OLAuth.prototype.callback = function(obj) {
 
 OLAuth.prototype.setCookie = function(value) {
     var date = new Date();
-    date.setTime(date.getTime()+(24*60*60*1000));  //one day expiry
+    date.setTime(date.getTime()+(10*60*1000));  //10 min expiry
     var expiry = date.toGMTString();
     var cookie = 'loan-'+br.bookId+'='+value;
     cookie    += '; expires='+expiry;
     cookie    += '; path=/; domain=.archive.org;';
-    document.cookie = cookie; 
+    document.cookie = cookie;
+    
+    //refresh the br-loan uuid cookie with current expiry, if needed
+    if (false !== this.loanUUID) {
+        cookie = 'br-loan-'+br.bookId+'='+this.loanUUID;
+        cookie    += '; expires='+expiry;
+        cookie    += '; path=/; domain=.archive.org;';
+        document.cookie = cookie;
+    }
 }
 
 OLAuth.prototype.startPolling = function () {    
     var self = this;
     this.poller=setInterval(function(){
         if (!self.olConnect) {
-          self.showPopup("#f00", "#fff", 'The BookReader cannot reach Open Library. This might mean that you are offline or that Open Library is down. Please check your Internet connection or try again later.');
+          self.showPopup("#f00", "#fff", 'Connection error', 'The BookReader cannot reach Open Library. This might mean that you are offline or that Open Library is down. Please check your Internet connection or try again later.');
           clearInterval(self.poller);
           self.ttsPoller = null;        
         } else {
           self.olConnect = false;
           //be sure to add random param to authUrl to avoid stale cache
-          $.ajax({url:self.authUrl+'?rand='+Math.random(), dataType:'jsonp', jsonpCallback:'olAuth.callback'});
+          var authUrl = self.authUrl+'?rand='+Math.random();
+          if (false !== self.loanUUID) {
+              authUrl += '&loan='+self.loanUUID
+          }
+          if (false !== self.loanToken) {
+              authUrl += '&token='+self.loanToken
+          }
+
+          $.ajax({url:authUrl, dataType:'jsonp', jsonpCallback:'olAuth.callback'});
         }
-    },300000);   
+    },300000);   //five minute interval
 }
 
 br.cleanupMetadata();