Browse Source

Merge branch 'master' into patterncs

sbarman 14 years ago
parent
commit
8621e1c358
  1. 160
      Makefile
  2. 1
      test/pdfs/shavian.pdf.link
  3. 22
      test/test.py
  4. 6
      test/test_manifest.json
  5. 0
      web/compressed.tracemonkey-pldi-09.pdf
  6. 0
      web/images/buttons.png
  7. 0
      web/images/source/Buttons.psd.zip
  8. 0
      web/images/source/FileButton.psd.zip
  9. 88
      web/index.html.template
  10. 0
      web/multi_page_viewer.css
  11. 8
      web/multi_page_viewer.html
  12. 0
      web/multi_page_viewer.js
  13. 0
      web/viewer.css
  14. 9
      web/viewer.html
  15. 0
      web/viewer.js
  16. 8
      web/viewer_worker.html

160
Makefile

@ -0,0 +1,160 @@
REPO = git@github.com:andreasgal/pdf.js.git
BUILD_DIR := build
DEFAULT_BROWSERS := test/resources/browser_manifests/browser_manifest.json
DEFAULT_TESTS := test/test_manifest.json
# JS files needed for pdf.js.
# This list doesn't account for the 'worker' directory.
PDF_JS_FILES = \
pdf.js \
crypto.js \
fonts.js \
glyphlist.js \
$(NULL)
# not sure what to do for all yet
all: help
# make server
#
# This target starts a local web server at localhost:8888. This can be
# used for testing all browsers.
server:
@cd test; python test.py --port=8888;
test: shell-test browser-test
# make browser-test
#
# This target runs in-browser tests using two primary arguments: a
# test manifest file, and a browser manifest file. Both are simple
# JSON formats, and examples can be found in the test/ directory. The
# target will inspect the environment for the PDF_TESTS and
# PDF_BROWSERS variables, and use those if found. Otherwise, the
# defaults at the top of this file are used.
ifeq ($(PDF_TESTS),)
PDF_TESTS := $(DEFAULT_TESTS)
endif
ifeq ($(PDF_BROWSERS),)
PDF_BROWSERS := $(DEFAULT_BROWSERS)
endif
browser-test:
@if [ ! "$(PDF_BROWSERS)" ]; then \
echo "Browser manifest file $(PDF_BROWSERS) does not exist."; \
echo "Try copying one of the examples" \
"in test/resources/browser_manifests/"; \
exit 1; \
fi;
cd test; \
python test.py --reftest \
--browserManifestFile=$(abspath $(PDF_BROWSERS)) \
--manifestFile=$(abspath $(PDF_TESTS))
# make shell-test
#
# This target runs all of the tests that can be run in a JS shell.
# The shell used is taken from the JS_SHELL environment variable. If
# that veriable is not defined, the script will attempt to use the copy
# of Rhino that comes with the Closure compiler used for producing the
# website.
SHELL_TARGET = $(NULL)
ifeq ($(JS_SHELL),)
JS_SHELL := "java -cp $(BUILD_DIR)/compiler.jar"
JS_SHELL += "com.google.javascript.jscomp.mozilla.rhino.tools.shell.Main"
SHELL_TARGET = compiler
endif
shell-test: shell-msg $(SHELL_TARGET) font-test
shell-msg:
ifeq ($(SHELL_TARGET), compiler)
@echo "No JS_SHELL env variable present."
@echo "The default is to find a copy of Rhino and try that."
endif
@echo "JS shell command is: $(JS_SHELL)"
font-test:
@echo "font test stub."
# make lint
#
# This target runs the Closure Linter on most of our JS files.
# To install gjslint, see:
#
# <http://code.google.com/closure/utilities/docs/linter_howto.html>
SRC_DIRS := . utils worker web
GJSLINT_FILES = $(foreach DIR,$(SRC_DIRS),$(wildcard $(DIR)/*.js))
lint:
gjslint $(GJSLINT_FILES)
# make web
#
# This target produces the website for the project, by checking out
# the gh-pages branch underneath the build directory, and then move
# the various viewer files into place.
#
# TODO: Use the Closure compiler to optimize the pdf.js files.
#
GH_PAGES = $(BUILD_DIR)/gh-pages
web: | compiler pages-repo \
$(addprefix $(GH_PAGES)/, $(PDF_JS_FILES)) \
$(addprefix $(GH_PAGES)/, $(wildcard web/*.*)) \
$(addprefix $(GH_PAGES)/, $(wildcard web/images/*.*))
@cp $(GH_PAGES)/web/index.html.template $(GH_PAGES)/index.html;
@cd $(GH_PAGES); git add -A;
@echo "Website built in $(GH_PAGES)."
# make pages-repo
#
# This target clones the gh-pages repo into the build directory. It
# deletes the current contents of the repo, since we overwrite
# everything with data from the master repo. The 'make web' target
# then uses 'git add -A' to track additions, modifications, moves,
# and deletions.
pages-repo: | $(BUILD_DIR)
@if [ ! -d "$(GH_PAGES)" ]; then \
git clone -b gh-pages $(REPO) $(GH_PAGES); \
rm -rf $(GH_PAGES)/*; \
fi;
@mkdir -p $(GH_PAGES)/web;
@mkdir -p $(GH_PAGES)/web/images;
$(GH_PAGES)/%.js: %.js
@cp $< $@
$(GH_PAGES)/web/%: web/%
@cp $< $@
$(GH_PAGES)/web/images/%: web/images/%
@cp $< $@
# make compiler
#
# This target downloads the Closure compiler, and places it in the
# build directory. This target is also useful when the user doesn't
# have a JS shell available--we can have them use the Rhino shell that
# comes with Closure.
COMPILER_URL = http://closure-compiler.googlecode.com/files/compiler-latest.zip
compiler: $(BUILD_DIR)/compiler.zip
$(BUILD_DIR)/compiler.zip: | $(BUILD_DIR)
curl $(COMPILER_URL) > $(BUILD_DIR)/compiler.zip;
cd $(BUILD_DIR); unzip compiler.zip compiler.jar;
# Make sure there's a build directory.
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
clean:
rm -rf $(BUILD_DIR)
# make help
#
# This target just prints out a message to read these comments. :)
help:
@echo "Read the comments in the Makefile for guidance.";
.PHONY: all test browser-test font-test shell-test \
shell-msg lint clean web compiler help server

1
test/pdfs/shavian.pdf.link

@ -0,0 +1 @@
http://www.unicode.org/charts/PDF/U10450.pdf

22
test/test.py

@ -17,7 +17,6 @@ TMPDIR = 'tmp'
VERBOSE = False VERBOSE = False
SERVER_HOST = "localhost" SERVER_HOST = "localhost"
SERVER_PORT = 8080
class TestOptions(OptionParser): class TestOptions(OptionParser):
def __init__(self, **kwargs): def __init__(self, **kwargs):
@ -34,6 +33,8 @@ class TestOptions(OptionParser):
self.add_option("--reftest", action="store_true", dest="reftest", self.add_option("--reftest", action="store_true", dest="reftest",
help="Automatically start reftest showing comparison test failures, if there are any.", help="Automatically start reftest showing comparison test failures, if there are any.",
default=False) default=False)
self.add_option("--port", action="store", dest="port", type="int",
help="The port the HTTP server should listen on.", default=8080)
self.set_usage(USAGE_EXAMPLE) self.set_usage(USAGE_EXAMPLE)
def verifyOptions(self, options): def verifyOptions(self, options):
@ -44,7 +45,7 @@ class TestOptions(OptionParser):
if options.browser and options.browserManifestFile: if options.browser and options.browserManifestFile:
print "Warning: ignoring browser argument since manifest file was also supplied" print "Warning: ignoring browser argument since manifest file was also supplied"
if not options.browser and not options.browserManifestFile: if not options.browser and not options.browserManifestFile:
print "No browser arguments supplied, so just starting server on port %s." % SERVER_PORT print "Starting server on port %s." % options.port
return options return options
def prompt(question): def prompt(question):
@ -325,7 +326,7 @@ def startBrowsers(browsers, options):
for b in browsers: for b in browsers:
b.setup() b.setup()
print 'Launching', b.name print 'Launching', b.name
host = 'http://%s:%s' % (SERVER_HOST, SERVER_PORT) host = 'http://%s:%s' % (SERVER_HOST, options.port)
path = '/test/test_slave.html?' path = '/test/test_slave.html?'
qs = 'browser='+ urllib.quote(b.name) +'&manifestFile='+ urllib.quote(options.manifestFile) qs = 'browser='+ urllib.quote(b.name) +'&manifestFile='+ urllib.quote(options.manifestFile)
qs += '&path=' + b.path qs += '&path=' + b.path
@ -482,8 +483,8 @@ def maybeUpdateRefImages(options, browser):
print 'done' print 'done'
def startReftest(browser): def startReftest(browser, options):
url = "http://%s:%s" % (SERVER_HOST, SERVER_PORT) url = "http://%s:%s" % (SERVER_HOST, options.port)
url += "/test/resources/reftest-analyzer.xhtml" url += "/test/resources/reftest-analyzer.xhtml"
url += "#web=/test/eq.log" url += "#web=/test/eq.log"
try: try:
@ -511,7 +512,7 @@ def runTests(options, browsers):
maybeUpdateRefImages(options, browsers[0]) maybeUpdateRefImages(options, browsers[0])
elif options.reftest and State.numEqFailures > 0: elif options.reftest and State.numEqFailures > 0:
print "\nStarting reftest harness to examine %d eq test failures." % State.numEqFailures print "\nStarting reftest harness to examine %d eq test failures." % State.numEqFailures
startReftest(browsers[0]) startReftest(browsers[0], options)
def main(): def main():
optionParser = TestOptions() optionParser = TestOptions()
@ -520,7 +521,7 @@ def main():
if options == None: if options == None:
sys.exit(1) sys.exit(1)
httpd = TestServer((SERVER_HOST, SERVER_PORT), PDFTestHandler) httpd = TestServer((SERVER_HOST, options.port), PDFTestHandler)
httpd_thread = threading.Thread(target=httpd.serve_forever) httpd_thread = threading.Thread(target=httpd.serve_forever)
httpd_thread.setDaemon(True) httpd_thread.setDaemon(True)
httpd_thread.start() httpd_thread.start()
@ -531,8 +532,11 @@ def main():
else: else:
# just run the server # just run the server
print "Running HTTP server. Press Ctrl-C to quit." print "Running HTTP server. Press Ctrl-C to quit."
while True: try:
time.sleep(1) while True:
time.sleep(1)
except (KeyboardInterrupt):
print "\nExiting."
if __name__ == '__main__': if __name__ == '__main__':
main() main()

6
test/test_manifest.json

@ -26,6 +26,12 @@
"rounds": 1, "rounds": 1,
"type": "load" "type": "load"
}, },
{ "id": "shavian-load",
"file": "pdfs/shavian.pdf",
"link": true,
"rounds": 1,
"type": "load"
},
{ "id": "sizes", { "id": "sizes",
"file": "pdfs/sizes.pdf", "file": "pdfs/sizes.pdf",
"rounds": 1, "rounds": 1,

0
compressed.tracemonkey-pldi-09.pdf → web/compressed.tracemonkey-pldi-09.pdf

0
images/buttons.png → web/images/buttons.png

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

0
images/source/Buttons.psd.zip → web/images/source/Buttons.psd.zip

0
images/source/FileButton.psd.zip → web/images/source/FileButton.psd.zip

88
web/index.html.template

@ -0,0 +1,88 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>andreasgal/pdf.js @ GitHub</title>
<style type="text/css">
body {
margin-top: 1.0em;
background-color: #482a30;
font-family: Helvetica, Arial, FreeSans, san-serif;
color: #ffffff;
}
#container {
margin: 0 auto;
width: 700px;
}
h1 { font-size: 3.8em; color: #b7d5cf; margin-bottom: 3px; }
h1 .small { font-size: 0.4em; }
h1 a { text-decoration: none }
h2 { font-size: 1.5em; color: #b7d5cf; }
h3 { text-align: center; color: #b7d5cf; }
a { color: #b7d5cf; }
.description { font-size: 1.2em; margin-bottom: 30px; margin-top: 30px; font-style: italic;}
.download { float: right; }
pre { background: #000; color: #fff; padding: 15px;}
hr { border: 0; width: 80%; border-bottom: 1px solid #aaa}
.footer { text-align:center; padding-top:30px; font-style: italic; }
</style>
</head>
<body>
<a href="http://github.com/andreasgal/pdf.js"><img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>
<div id="container">
<div class="download">
<a href="http://github.com/andreasgal/pdf.js/zipball/master">
<img border="0" width="90" src="http://github.com/images/modules/download/zip.png"></a>
<a href="http://github.com/andreasgal/pdf.js/tarball/master">
<img border="0" width="90" src="http://github.com/images/modules/download/tar.png"></a>
</div>
<h1><a href="http://github.com/andreasgal/pdf.js">pdf.js</a>
<span class="small">by <a href="http://github.com/andreasgal">andreasgal</a></span></h1>
<div class="description">
PDF Reader in JavaScript
</div>
<h2>Try it out!</h2>
<p>Live <a href="web/multi_page_viewer.html">demo</a> lives here.</p>
<h2>Authors</h2>
<p>Vivien Nicolas (21@vingtetun.org)
<br/>Andreas Gal (andreas.gal@gmail.com)
<br/>Soumya Deb (debloper@gmail.com)
<br/>Chris Jones (jones.chris.g@gmail.com)
<br/>Justin D'Arcangelo (justindarc@gmail.com)
<br/>sbarman (sbarman@eecs.berkeley.edu)
<br/>
<br/> </p>
<h2>Contact</h2>
<p> (andreas.gal@gmail.com)
<br/> </p>
<h2>Download</h2>
<p>
You can download this project in either
<a href="http://github.com/andreasgal/pdf.js/zipball/master">zip</a> or
<a href="http://github.com/andreasgal/pdf.js/tarball/master">tar</a> formats.
</p>
<p>You can also clone the project with <a href="http://git-scm.com">Git</a>
by running:
<pre>$ git clone git://github.com/andreasgal/pdf.js</pre>
</p>
<div class="footer">
get the source code on GitHub : <a href="http://github.com/andreasgal/pdf.js">andreasgal/pdf.js</a>
</div>
</div>
</body>
</html>

0
multi_page_viewer.css → web/multi_page_viewer.css

8
multi_page_viewer.html → web/multi_page_viewer.html

@ -4,10 +4,10 @@
<title>pdf.js Multi-Page Viewer</title> <title>pdf.js Multi-Page Viewer</title>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/> <meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
<link rel="stylesheet" href="multi_page_viewer.css" type="text/css" media="screen"/> <link rel="stylesheet" href="multi_page_viewer.css" type="text/css" media="screen"/>
<script type="text/javascript" src="pdf.js"></script> <script type="text/javascript" src="../pdf.js"></script>
<script type="text/javascript" src="fonts.js"></script> <script type="text/javascript" src="../fonts.js"></script>
<script type="text/javascript" src="crypto.js"></script> <script type="text/javascript" src="../crypto.js"></script>
<script type="text/javascript" src="glyphlist.js"></script> <script type="text/javascript" src="../glyphlist.js"></script>
<script type="text/javascript" src="multi_page_viewer.js"></script> <script type="text/javascript" src="multi_page_viewer.js"></script>
</head> </head>
<body> <body>

0
multi_page_viewer.js → web/multi_page_viewer.js

0
viewer.css → web/viewer.css

9
viewer.html → web/viewer.html

@ -4,11 +4,10 @@
<link rel="stylesheet" href="viewer.css"></link> <link rel="stylesheet" href="viewer.css"></link>
<script type="text/javascript" src="viewer.js"></script> <script type="text/javascript" src="viewer.js"></script>
<script type="text/javascript" src="pdf.js"></script> <script type="text/javascript" src="../pdf.js"></script>
<script type="text/javascript" src="utils/fonts_utils.js"></script> <script type="text/javascript" src="../fonts.js"></script>
<script type="text/javascript" src="fonts.js"></script> <script type="text/javascript" src="../crypto.js"></script>
<script type="text/javascript" src="crypto.js"></script> <script type="text/javascript" src="../glyphlist.js"></script>
<script type="text/javascript" src="glyphlist.js"></script>
</head> </head>
<body onload="load();"> <body onload="load();">

0
viewer.js → web/viewer.js

8
viewer_worker.html → web/viewer_worker.html

@ -1,10 +1,10 @@
<html> <html>
<head> <head>
<title>Simple pdf.js page worker viewer</title> <title>Simple pdf.js page worker viewer</title>
<script type="text/javascript" src="fonts.js"></script> <script type="text/javascript" src="../fonts.js"></script>
<script type="text/javascript" src="glyphlist.js"></script> <script type="text/javascript" src="../glyphlist.js"></script>
<script type="text/javascript" src="pdf.js"></script> <script type="text/javascript" src="../pdf.js"></script>
<script type="text/javascript" src="worker/client.js"></script> <script type="text/javascript" src="../worker/client.js"></script>
<script> <script>
Loading…
Cancel
Save