Browse Source

Display error messages on more problems.

Brendan Dahl 14 years ago
parent
commit
b40af3555b
  1. 8
      src/core.js
  2. 45
      web/viewer.js

8
src/core.js

@ -39,11 +39,15 @@ function getPdf(arg, callback) {
if ('error' in params) if ('error' in params)
xhr.onerror = params.error || undefined; xhr.onerror = params.error || undefined;
xhr.onreadystatechange = function getPdfOnreadystatechange() { xhr.onreadystatechange = function getPdfOnreadystatechange(e) {
if (xhr.readyState === 4 && xhr.status === xhr.expected) { if (xhr.readyState === 4) {
if (xhr.status === xhr.expected) {
var data = (xhr.mozResponseArrayBuffer || xhr.mozResponse || var data = (xhr.mozResponseArrayBuffer || xhr.mozResponse ||
xhr.responseArrayBuffer || xhr.response); xhr.responseArrayBuffer || xhr.response);
callback(data); callback(data);
} else {
params.error(e);
}
} }
}; };
xhr.send(null); xhr.send(null);

45
web/viewer.js

@ -129,7 +129,14 @@ var PDFView = {
if (evt.lengthComputable) if (evt.lengthComputable)
self.progress(evt.loaded / evt.total); self.progress(evt.loaded / evt.total);
}, },
error: self.error error: function getPdfError(e) {
var loadingIndicator = document.getElementById('loading');
loadingIndicator.innerHTML = 'Error';
var moreInfo = {
message: 'Unexpected server response of ' + e.target.status + '.'
};
self.error('An error occurred while loading the PDF.', moreInfo);
}
}, },
function getPdfLoad(data) { function getPdfLoad(data) {
self.loading = true; self.loading = true;
@ -181,18 +188,28 @@ var PDFView = {
return ''; return '';
}, },
error: function pdfViewError(message, error) { /**
* Show the error box.
* @param {String} message A message that is human readable.
* @param {Object} moreInfo (optional) Further information about the error
* that is more technical. Should have a 'message'
* and optionally a 'stack' property.
*/
error: function pdfViewError(message, moreInfo) {
var errorWrapper = document.getElementById('errorWrapper'); var errorWrapper = document.getElementById('errorWrapper');
errorWrapper.removeAttribute('hidden'); errorWrapper.removeAttribute('hidden');
var errorMessage = document.getElementById('errorMessage'); var errorMessage = document.getElementById('errorMessage');
errorMessage.innerHTML = message; errorMessage.innerHTML = message;
if (error) { var closeButton = document.getElementById('errorClose');
closeButton.onclick = function() {
errorWrapper.setAttribute('hidden', 'true');
};
var errorMoreInfo = document.getElementById('errorMoreInfo'); var errorMoreInfo = document.getElementById('errorMoreInfo');
var moreInfoButton = document.getElementById('errorShowMore'); var moreInfoButton = document.getElementById('errorShowMore');
var lessInfoButton = document.getElementById('errorShowLess'); var lessInfoButton = document.getElementById('errorShowLess');
var closeButton = document.getElementById('errorClose');
moreInfoButton.onclick = function() { moreInfoButton.onclick = function() {
errorMoreInfo.removeAttribute('hidden'); errorMoreInfo.removeAttribute('hidden');
moreInfoButton.setAttribute('hidden', 'true'); moreInfoButton.setAttribute('hidden', 'true');
@ -203,11 +220,14 @@ var PDFView = {
moreInfoButton.removeAttribute('hidden'); moreInfoButton.removeAttribute('hidden');
lessInfoButton.setAttribute('hidden', 'true'); lessInfoButton.setAttribute('hidden', 'true');
}; };
closeButton.onclick = function() {
errorWrapper.setAttribute('hidden', 'true');
};
moreInfoButton.removeAttribute('hidden'); moreInfoButton.removeAttribute('hidden');
errorMoreInfo.innerHTML = error.message + '\n' + error.stack; lessInfoButton.setAttribute('hidden', 'true');
errorMoreInfo.innerHTML = 'PDF.JS Build: ' + PDFJS.build + '\n';
if (moreInfo) {
errorMoreInfo.innerHTML += 'Message: ' + moreInfo.message;
if (moreInfo.stack)
errorMoreInfo.innerHTML += '\n' + 'Stack: ' + moreInfo.stack;
} }
}, },
@ -225,6 +245,9 @@ var PDFView = {
}; };
} }
var errorWrapper = document.getElementById('errorWrapper');
errorWrapper.setAttribute('hidden', 'true');
var loadingIndicator = document.getElementById('loading'); var loadingIndicator = document.getElementById('loading');
loadingIndicator.setAttribute('hidden', 'true'); loadingIndicator.setAttribute('hidden', 'true');
@ -241,7 +264,11 @@ var PDFView = {
while (container.hasChildNodes()) while (container.hasChildNodes())
container.removeChild(container.lastChild); container.removeChild(container.lastChild);
try {
var pdf = new PDFJS.PDFDoc(data); var pdf = new PDFJS.PDFDoc(data);
} catch (e) {
this.error('An error occurred while reading the PDF.', e);
}
var pagesCount = pdf.numPages; var pagesCount = pdf.numPages;
document.getElementById('numPages').innerHTML = pagesCount; document.getElementById('numPages').innerHTML = pagesCount;
document.getElementById('pageNumber').max = pagesCount; document.getElementById('pageNumber').max = pagesCount;
@ -533,7 +560,7 @@ var PageView = function pageView(container, content, id, pageWidth, pageHeight,
this.onAfterDraw(); this.onAfterDraw();
}).bind(this), }).bind(this),
function pageViewErrorback(e) { function pageViewErrorback(e) {
PDFView.error('An error occured while rendering the page.', e); PDFView.error('An error occurred while rendering the page.', e);
} }
); );

Loading…
Cancel
Save