Skip to content

Commit 46a48a5

Browse files
committed
Merge branch 'refs/heads/master' into text-select
Conflicts: src/core.js
2 parents 9ddc40c + 085710f commit 46a48a5

24 files changed

+524
-348
lines changed

Makefile

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ BUILD_TARGET := $(BUILD_DIR)/pdf.js
44
DEFAULT_BROWSERS := resources/browser_manifests/browser_manifest.json
55
DEFAULT_TESTS := test_manifest.json
66

7-
EXTENSION_SRC := ./extensions/firefox
8-
EXTENSION_NAME := pdf.js.xpi
7+
EXTENSION_SRC := ./extensions/
8+
FIREFOX_EXTENSION_NAME := pdf.js.xpi
9+
CHROME_EXTENSION_NAME := pdf.js.crx
910

1011
all: bundle
1112

@@ -125,7 +126,7 @@ browser-test:
125126
#
126127
# <http://code.google.com/closure/utilities/docs/linter_howto.html>
127128
SRC_DIRS := . src utils web test examples/helloworld extensions/firefox \
128-
extensions/firefox/components
129+
extensions/firefox/components extensions/chrome
129130
GJSLINT_FILES = $(foreach DIR,$(SRC_DIRS),$(wildcard $(DIR)/*.js))
130131
lint:
131132
gjslint --nojsdoc $(GJSLINT_FILES)
@@ -139,12 +140,11 @@ lint:
139140
# TODO: Use the Closure compiler to optimize the pdf.js files.
140141
#
141142
GH_PAGES = $(BUILD_DIR)/gh-pages
142-
web: | production extension compiler pages-repo \
143-
$(addprefix $(GH_PAGES)/, $(BUILD_TARGET)) \
144-
$(addprefix $(GH_PAGES)/, $(wildcard web/*.*)) \
145-
$(addprefix $(GH_PAGES)/, $(wildcard web/images/*.*)) \
146-
$(addprefix $(GH_PAGES)/, $(wildcard $(EXTENSION_SRC)/*.xpi))
147-
143+
web: | production extension compiler pages-repo
144+
@cp $(BUILD_TARGET) $(GH_PAGES)/$(BUILD_TARGET)
145+
@cp -R web/* $(GH_PAGES)/web
146+
@cp web/images/* $(GH_PAGES)/web/images
147+
@cp $(EXTENSION_SRC)/firefox/*.xpi $(GH_PAGES)/$(EXTENSION_SRC)/firefox/
148148
@cp $(GH_PAGES)/web/index.html.template $(GH_PAGES)/index.html;
149149
@mv -f $(GH_PAGES)/web/viewer-production.html $(GH_PAGES)/web/viewer.html;
150150
@cd $(GH_PAGES); git add -A;
@@ -167,19 +167,7 @@ pages-repo: | $(BUILD_DIR)
167167
@mkdir -p $(GH_PAGES)/web;
168168
@mkdir -p $(GH_PAGES)/web/images;
169169
@mkdir -p $(GH_PAGES)/build;
170-
@mkdir -p $(GH_PAGES)/$(EXTENSION_SRC);
171-
172-
$(GH_PAGES)/$(BUILD_DIR)/%.js: build/%.js
173-
@cp $< $@
174-
175-
$(GH_PAGES)/web/%: web/%
176-
@cp $< $@
177-
178-
$(GH_PAGES)/web/images/%: web/images/%
179-
@cp $< $@
180-
181-
$(GH_PAGES)/$(EXTENSION_SRC)/%: $(EXTENSION_SRC)/%
182-
@cp -R $< $@
170+
@mkdir -p $(GH_PAGES)/$(EXTENSION_SRC)/firefox;
183171

184172
# # make compiler
185173
# #
@@ -199,6 +187,8 @@ $(GH_PAGES)/$(EXTENSION_SRC)/%: $(EXTENSION_SRC)/%
199187
# This target produce a restartless firefox extension containing a
200188
# copy of the pdf.js source.
201189
CONTENT_DIR := content
190+
FIREFOX_CONTENT_DIR := $(EXTENSION_SRC)/firefox/$(CONTENT_DIR)/
191+
CHROME_CONTENT_DIR := $(EXTENSION_SRC)/chrome/$(CONTENT_DIR)/
202192
PDF_WEB_FILES = \
203193
web/images \
204194
web/compatibility.js \
@@ -208,16 +198,28 @@ PDF_WEB_FILES = \
208198
$(NULL)
209199
extension: | production
210200
# Copy a standalone version of pdf.js inside the content directory
211-
@rm -Rf $(EXTENSION_SRC)/$(CONTENT_DIR)/
212-
@mkdir -p $(EXTENSION_SRC)/$(CONTENT_DIR)/$(BUILD_DIR)
213-
@mkdir -p $(EXTENSION_SRC)/$(CONTENT_DIR)/web
214-
@cp $(BUILD_TARGET) $(EXTENSION_SRC)/$(CONTENT_DIR)/$(BUILD_DIR)
215-
@cp -r $(PDF_WEB_FILES) $(EXTENSION_SRC)/$(CONTENT_DIR)/web/
216-
@mv -f $(EXTENSION_SRC)/$(CONTENT_DIR)/web/viewer-production.html $(EXTENSION_SRC)/$(CONTENT_DIR)/web/viewer.html
201+
@rm -Rf $(FIREFOX_CONTENT_DIR)
202+
@mkdir -p $(FIREFOX_CONTENT_DIR)/$(BUILD_DIR)
203+
@mkdir -p $(FIREFOX_CONTENT_DIR)/web
204+
@cp $(BUILD_TARGET) $(FIREFOX_CONTENT_DIR)/$(BUILD_DIR)
205+
@cp -r $(PDF_WEB_FILES) $(FIREFOX_CONTENT_DIR)/web/
206+
@mv -f $(FIREFOX_CONTENT_DIR)/web/viewer-production.html $(FIREFOX_CONTENT_DIR)/web/viewer.html
217207

218208
# Create the xpi
219-
@cd $(EXTENSION_SRC); zip -r $(EXTENSION_NAME) *
220-
@echo "extension created: " $(EXTENSION_NAME)
209+
@cd $(EXTENSION_SRC)/firefox; zip -r $(FIREFOX_EXTENSION_NAME) *
210+
@echo "extension created: " $(FIREFOX_EXTENSION_NAME)
211+
212+
# Copy a standalone version of pdf.js inside the extension directory
213+
@rm -Rf $(CHROME_CONTENT_DIR)
214+
@mkdir -p $(CHROME_CONTENT_DIR)/$(BUILD_DIR)
215+
@mkdir -p $(CHROME_CONTENT_DIR)/web
216+
@cp $(BUILD_TARGET) $(CHROME_CONTENT_DIR)/$(BUILD_DIR)
217+
@cp -r $(PDF_WEB_FILES) $(CHROME_CONTENT_DIR)/web/
218+
@mv -f $(CHROME_CONTENT_DIR)/web/viewer-production.html $(CHROME_CONTENT_DIR)/web/viewer.html
219+
220+
# Create the crx
221+
#TODO
222+
221223

222224

223225
# Make sure there's a build directory.

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,15 @@ using the pdf.js API.
2929

3030
### Extension
3131

32-
A Firefox extension is also available:
32+
A up-to-date Firefox extension is also available:
3333

3434
+ http://mozilla.github.com/pdf.js/extensions/firefox/pdf.js.xpi
3535

36-
However, note that the extension might not reflect the latest source in our master branch.
36+
(The above link is updated upon every merge to our master branch).
37+
38+
For an experimental Chrome extension, get the code as explained below and issue `make extension`.
39+
Then open Chrome with the flag `--enable-experimental-extension-apis`, go to `Tools > Extension`
40+
and load the (unpackaged) extension from the directory `extensions/chrome`.
3741

3842
### Getting the code
3943

examples/helloworld/index.html

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,33 @@
33

44
<head>
55
<!-- In production, only one script (pdf.js) is necessary -->
6-
<script type="text/javascript" src="../../src/core.js"></script>
7-
<script type="text/javascript" src="../../src/util.js"></script>
8-
<script type="text/javascript" src="../../src/canvas.js"></script>
9-
<script type="text/javascript" src="../../src/obj.js"></script>
10-
<script type="text/javascript" src="../../src/function.js"></script>
11-
<script type="text/javascript" src="../../src/charsets.js"></script>
12-
<script type="text/javascript" src="../../src/cidmaps.js"></script>
13-
<script type="text/javascript" src="../../src/colorspace.js"></script>
14-
<script type="text/javascript" src="../../src/crypto.js"></script>
15-
<script type="text/javascript" src="../../src/evaluator.js"></script>
16-
<script type="text/javascript" src="../../src/fonts.js"></script>
17-
<script type="text/javascript" src="../../src/glyphlist.js"></script>
18-
<script type="text/javascript" src="../../src/image.js"></script>
19-
<script type="text/javascript" src="../../src/metrics.js"></script>
20-
<script type="text/javascript" src="../../src/parser.js"></script>
21-
<script type="text/javascript" src="../../src/pattern.js"></script>
22-
<script type="text/javascript" src="../../src/stream.js"></script>
23-
<script type="text/javascript" src="../../src/worker.js"></script>
6+
<!-- In production, change the content of PDFJS.workerSrc below -->
7+
<script type="text/javascript" src="../../src/core.js"></script>
8+
<script type="text/javascript" src="../../src/util.js"></script>
9+
<script type="text/javascript" src="../../src/canvas.js"></script>
10+
<script type="text/javascript" src="../../src/obj.js"></script>
11+
<script type="text/javascript" src="../../src/function.js"></script>
12+
<script type="text/javascript" src="../../src/charsets.js"></script>
13+
<script type="text/javascript" src="../../src/cidmaps.js"></script>
14+
<script type="text/javascript" src="../../src/colorspace.js"></script>
15+
<script type="text/javascript" src="../../src/crypto.js"></script>
16+
<script type="text/javascript" src="../../src/evaluator.js"></script>
17+
<script type="text/javascript" src="../../src/fonts.js"></script>
18+
<script type="text/javascript" src="../../src/glyphlist.js"></script>
19+
<script type="text/javascript" src="../../src/image.js"></script>
20+
<script type="text/javascript" src="../../src/metrics.js"></script>
21+
<script type="text/javascript" src="../../src/parser.js"></script>
22+
<script type="text/javascript" src="../../src/pattern.js"></script>
23+
<script type="text/javascript" src="../../src/stream.js"></script>
24+
<script type="text/javascript" src="../../src/worker.js"></script>
2425

26+
<script type="text/javascript">
27+
// Specify the main script used to create a new PDF.JS web worker.
28+
// In production, change this to point to the combined `pdf.js` file.
29+
PDFJS.workerSrc = '../../src/worker_loader.js';
30+
</script>
2531
<script type="text/javascript" src="hello.js"></script>
26-
</head>
32+
</head>
2733

2834
<body>
2935
<canvas id="the-canvas" style="border:1px solid black;"/>

extensions/chrome/manifest.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"name": "uriloader@pdf.js",
3+
"version": "0.1",
4+
"description": "Read PDF Document",
5+
"permissions": [
6+
"experimental",
7+
"http://*/*.pdf",
8+
"file:///*/*.pdf"
9+
],
10+
"background_page": "pdfHandler.html"
11+
}

extensions/chrome/pdfHandler.html

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<!doctype html>
2+
<script>
3+
chrome.experimental.webRequest.onBeforeRequest.addListener(
4+
function(details) {
5+
var viewerPage = 'content/web/viewer.html';
6+
var url = chrome.extension.getURL(viewerPage) + '?file=' + details.url;
7+
return { redirectUrl: url };
8+
},
9+
{
10+
urls: [
11+
"http://*/*.pdf",
12+
"file://*/*.pdf",
13+
],
14+
types: [ "main_frame" ]
15+
},
16+
["blocking"]);
17+
</script>
18+

src/canvas.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ var CanvasExtraState = (function canvasExtraState() {
2424
this.wordSpacing = 0;
2525
this.textHScale = 1;
2626
// Color spaces
27-
this.fillColorSpace = new DeviceGrayCS;
27+
this.fillColorSpace = new DeviceGrayCS();
2828
this.fillColorSpaceObj = null;
29-
this.strokeColorSpace = new DeviceGrayCS;
29+
this.strokeColorSpace = new DeviceGrayCS();
3030
this.strokeColorSpaceObj = null;
3131
this.fillColorObj = null;
3232
this.strokeColorObj = null;
@@ -131,7 +131,7 @@ var CanvasGraphics = (function canvasGraphics() {
131131
this[fnArray[i]].apply(this, argsArray[i]);
132132
} else {
133133
var deps = argsArray[i];
134-
for (var n = 0; n < deps.length; n++) {
134+
for (var n = 0, nn = deps.length; n < nn; n++) {
135135
var depObjId = deps[n];
136136

137137
// If the promise isn't resolved yet, add the continueCallback
@@ -221,7 +221,7 @@ var CanvasGraphics = (function canvasGraphics() {
221221
TODO('set flatness: ' + flatness);
222222
},
223223
setGState: function canvasGraphicsSetGState(states) {
224-
for (var i = 0; i < states.length; i++) {
224+
for (var i = 0, ii = states.length; i < ii; i++) {
225225
var state = states[i];
226226
var key = state[0];
227227
var value = state[1];

0 commit comments

Comments
 (0)