diff --git a/Makefile b/Makefile
index 043cb7fb5..7688025a5 100644
--- a/Makefile
+++ b/Makefile
@@ -59,7 +59,7 @@ test: shell-test browser-test
production: | bundle
@echo "Preparing web/viewer-production.html"; \
cd web; \
- sed '/PDFJSSCRIPT_REMOVE/d' viewer.html > viewer-1.tmp; \
+ sed '/PDFJSSCRIPT_REMOVE_CORE/d' viewer.html > viewer-1.tmp; \
sed '/PDFJSSCRIPT_INCLUDE_BUILD/ r viewer-snippet.html' viewer-1.tmp > viewer-production.html; \
rm -f *.tmp; \
cd ..
@@ -215,6 +215,7 @@ EXTENSION_WEB_FILES = \
web/viewer.js \
web/viewer.html \
web/viewer-production.html \
+ web/debugger.js \
$(NULL)
FIREFOX_BUILD_DIR := $(BUILD_DIR)/firefox
@@ -256,7 +257,7 @@ extension: | production
# Modify the viewer so it does all the extension only stuff.
@cd $(FIREFOX_BUILD_CONTENT)/web; \
sed -i.bak '/PDFJSSCRIPT_INCLUDE_BUNDLE/ r ../build/pdf.js' viewer-snippet-firefox-extension.html; \
- sed -i.bak '/PDFJSSCRIPT_REMOVE/d' viewer.html; \
+ sed -i.bak '/PDFJSSCRIPT_REMOVE_CORE/d' viewer.html; \
sed -i.bak '/PDFJSSCRIPT_REMOVE_FIREFOX_EXTENSION/d' viewer.html; \
sed -i.bak '/PDFJSSCRIPT_INCLUDE_FIREFOX_EXTENSION/ r viewer-snippet-firefox-extension.html' viewer.html; \
rm -f *.bak;
diff --git a/README.md b/README.md
index 80763aa75..33bb30b66 100644
--- a/README.md
+++ b/README.md
@@ -37,8 +37,8 @@ auto-update extensions on a daily basis (you can change this through the
`extensions.update.interval` option in `about:config`).
For an experimental Chrome extension, get the code as explained below and issue `make extension`.
-Then open Chrome with the flag `--enable-experimental-extension-apis`, go to `Tools > Extension`
-and load the (unpackaged) extension from the directory `extensions/chrome`.
+Then open Chrome, go to `Tools > Extension` and load the (unpackaged) extension
+from the directory `build/chrome`.
### Getting the code
diff --git a/extensions/chrome/manifest.json b/extensions/chrome/manifest.json
index 629e41b31..9b34437b2 100644
--- a/extensions/chrome/manifest.json
+++ b/extensions/chrome/manifest.json
@@ -3,7 +3,7 @@
"version": "0.1",
"description": "Read PDF Document",
"permissions": [
- "experimental",
+ "webRequest", "webRequestBlocking",
"http://*/*.pdf",
"file:///*/*.pdf"
],
diff --git a/extensions/chrome/pdfHandler.html b/extensions/chrome/pdfHandler.html
index c13e24c57..1d213bbba 100644
--- a/extensions/chrome/pdfHandler.html
+++ b/extensions/chrome/pdfHandler.html
@@ -1,6 +1,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -122,6 +124,7 @@
+
Loading... 0%
diff --git a/web/viewer.js b/web/viewer.js
index de32aca89..27e79a31d 100644
--- a/web/viewer.js
+++ b/web/viewer.js
@@ -37,10 +37,6 @@ var RenderingQueue = (function RenderingQueueClosure() {
if (!item.drawingRequired())
return; // as no redraw required, no need for queueing.
- if ('rendering' in item)
- return; // is already in the queue
-
- item.rendering = true;
this.items.push(item);
if (this.items.length > 1)
return; // not first item
@@ -49,7 +45,6 @@ var RenderingQueue = (function RenderingQueueClosure() {
},
continueExecution: function RenderingQueueContinueExecution() {
var item = this.items.shift();
- delete item.rendering;
if (this.items.length == 0)
return; // queue is empty
@@ -510,13 +505,7 @@ var PDFView = {
return;
if (hash.indexOf('=') >= 0) {
- // parsing query string
- var paramsPairs = hash.split('&');
- var params = {};
- for (var i = 0; i < paramsPairs.length; ++i) {
- var paramPair = paramsPairs[i].split('=');
- params[paramPair[0]] = paramPair[1];
- }
+ var params = PDFView.parseQueryString(hash);
// borrowing syntax from "Parameters for Opening PDF Files"
if ('nameddest' in params) {
PDFView.navigateTo(params.nameddest);
@@ -572,6 +561,10 @@ var PDFView = {
}
},
+ pinSidebar: function pdfViewPinSidebar() {
+ document.getElementById('sidebar').classList.toggle('pinned');
+ },
+
getVisiblePages: function pdfViewGetVisiblePages() {
var pages = this.pages;
var kBottomMargin = 10;
@@ -624,6 +617,16 @@ var PDFView = {
}
return visibleThumbs;
+ },
+
+ // Helper function to parse query string (e.g. ?param1=value&parm2=...).
+ parseQueryString: function pdfViewParseQueryString(query) {
+ var params = query.split('&');
+ for (var i = 0; i < params.length; i++) {
+ var param = params[i].split('=');
+ params[unescape(param[0])] = unescape(param[1]);
+ }
+ return params;
}
};
@@ -865,7 +868,10 @@ var PageView = function pageView(container, content, id, pageWidth, pageHeight,
var self = this;
this.content.startRendering(ctx, function pageViewDrawCallback(error) {
- div.removeChild(self.loadingIconDiv);
+ if (self.loadingIconDiv) {
+ div.removeChild(self.loadingIconDiv);
+ delete self.loadingIconDiv;
+ }
if (error)
PDFView.error('An error occurred while rendering the page.', error);
@@ -968,7 +974,7 @@ var ThumbnailView = function thumbnailView(container, page, id, pageRatio) {
};
this.setImage = function thumbnailViewSetImage(img) {
- if (this.hasImage)
+ if (this.hasImage || !img)
return;
var ctx = getPageDrawContext();
@@ -1084,9 +1090,9 @@ var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
// vScale and hScale already contain the scaling to pixel units
var fontHeight = fontSize * text.geom.vScale;
textDiv.dataset.canvasWidth = text.canvasWidth * text.geom.hScale;
+ textDiv.dataset.fontName = fontName;
textDiv.style.fontSize = fontHeight + 'px';
- textDiv.style.fontFamily = fontName || 'sans-serif';
textDiv.style.left = text.geom.x + 'px';
textDiv.style.top = (text.geom.y - fontHeight) + 'px';
textDiv.textContent = text.str;
@@ -1096,16 +1102,11 @@ var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
};
window.addEventListener('load', function webViewerLoad(evt) {
- var params = document.location.search.substring(1).split('&');
- for (var i = 0; i < params.length; i++) {
- var param = params[i].split('=');
- params[unescape(param[0])] = unescape(param[1]);
- }
+ var params = PDFView.parseQueryString(document.location.search.substring(1));
- var scale = ('scale' in params) ? params.scale : 0;
var file = PDFJS.isFirefoxExtension ?
window.location.toString() : params.file || kDefaultURL;
- PDFView.open(file, parseFloat(scale));
+ PDFView.open(file, 0);
if (PDFJS.isFirefoxExtension || !window.File || !window.FileReader ||
!window.FileList || !window.Blob) {
@@ -1116,11 +1117,32 @@ window.addEventListener('load', function webViewerLoad(evt) {
document.getElementById('fileInput').value = null;
}
- if ('disableWorker' in params)
- PDFJS.disableWorker = (params['disableWorker'] === 'true');
+ // Special debugging flags in the hash section of the URL.
+ var hash = document.location.hash.substring(1);
+ var hashParams = PDFView.parseQueryString(hash);
- if ('disableTextLayer' in params)
- PDFJS.disableTextLayer = (params['disableTextLayer'] === 'true');
+ if ('disableWorker' in hashParams)
+ PDFJS.disableWorker = (hashParams['disableWorker'] === 'true');
+
+ if ('disableTextLayer' in hashParams)
+ PDFJS.disableTextLayer = (hashParams['disableTextLayer'] === 'true');
+
+ if ('pdfBug' in hashParams) {
+ PDFJS.pdfBug = true;
+ var pdfBug = hashParams['pdfBug'];
+ var all = false, enabled = [];
+ if (pdfBug === 'all')
+ all = true;
+ else
+ enabled = pdfBug.split(',');
+ var debugTools = PDFBug.tools;
+ for (var i = 0; i < debugTools.length; ++i) {
+ var tool = debugTools[i];
+ if (all || enabled.indexOf(tool.id) !== -1)
+ tool.enabled = true;
+ }
+ PDFBug.init();
+ }
if ('enableBench' in params)
PDFJS.enableBench = (params['enableBench'] === 'true');
@@ -1212,7 +1234,6 @@ window.addEventListener('scroll', function webViewerScroll(evt) {
updateViewarea();
}, true);
-
var thumbnailTimer;
function updateThumbViewArea() {