diff --git a/examples/components/simpleviewer.html b/examples/components/simpleviewer.html
new file mode 100644
index 000000000..b1d6c9d19
--- /dev/null
+++ b/examples/components/simpleviewer.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+ PDF.js viewer using built components
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/components/simpleviewer.js b/examples/components/simpleviewer.js
new file mode 100644
index 000000000..1934a5a6e
--- /dev/null
+++ b/examples/components/simpleviewer.js
@@ -0,0 +1,49 @@
+/* Copyright 2014 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+'use strict';
+
+if (!PDFJS.PDFViewer || !PDFJS.getDocument) {
+ alert('Please built the library and components using\n' +
+ ' `node make generic components`');
+}
+
+// If pdf.js must be execute via eval or pdf.worker.js is located at the
+// different location than pdf.js, specify workerSrc.
+//
+// PDFJS.workerSrc = '../../build/pdf.worker.js';
+
+// Some PDFs need external cmaps
+//
+// PDFJS.cMapUrl = '../../external/bcmaps/';
+// PDFJS.cMapPacked = true;
+
+var DEFAULT_URL = '../../web/compressed.tracemonkey-pldi-09.pdf';
+
+var container = document.getElementById('viewerContainer');
+var pdfViewer = new PDFJS.PDFViewer({
+ container: container
+});
+
+container.addEventListener('pagesinit', function () {
+ // we can use pdfViewer now, e.g. let's change default scale.
+ pdfViewer.currentScaleValue = 'page-width';
+});
+
+// Loading document.
+PDFJS.getDocument(DEFAULT_URL).then(function (pdfDocument) {
+ // Document loaded, specifying document for the viewer.
+ pdfViewer.setDocument(pdfDocument);
+});
diff --git a/examples/learning/helloworld.html b/examples/learning/helloworld.html
index b34474635..9518127ee 100644
--- a/examples/learning/helloworld.html
+++ b/examples/learning/helloworld.html
@@ -31,7 +31,7 @@
//
// If pdf.js must be execute via eval or pdf.worker.js is located at the
- // different location that pdf.js, specify workerSrc.
+ // different location than pdf.js, specify workerSrc.
//
// PDFJS.workerSrc = '../../build/pdf.worker.js';
diff --git a/examples/learning/prevnext.html b/examples/learning/prevnext.html
index 42c1f1b81..4ab65d9e9 100644
--- a/examples/learning/prevnext.html
+++ b/examples/learning/prevnext.html
@@ -41,7 +41,7 @@
//
// If pdf.js must be execute via eval or pdf.worker.js is located at the
- // different location that pdf.js, specify workerSrc.
+ // different location than pdf.js, specify workerSrc.
//
// PDFJS.workerSrc = '../../build/pdf.worker.js';
diff --git a/make.js b/make.js
index 278c505e0..3a4456fec 100644
--- a/make.js
+++ b/make.js
@@ -49,7 +49,8 @@ var ROOT_DIR = __dirname + '/', // absolute path to project's root
GH_PAGES_DIR = BUILD_DIR + 'gh-pages/',
GENERIC_DIR = BUILD_DIR + 'generic/',
MINIFIED_DIR = BUILD_DIR + 'minified/',
- SINGLE_FILE_DIR = BUILD_DIR + '/singlefile/',
+ SINGLE_FILE_DIR = BUILD_DIR + 'singlefile/',
+ COMPONENTS_DIR = BUILD_DIR + 'components/',
REPO = 'git@github.com:mozilla/pdf.js.git',
MOZCENTRAL_PREF_PREFIX = 'pdfjs',
FIREFOX_PREF_PREFIX = 'extensions.uriloader@pdf.js',
@@ -65,7 +66,8 @@ var DEFINES = {
B2G: false,
CHROME: false,
MINIFIED: false,
- SINGLE_FILE: false
+ SINGLE_FILE: false,
+ COMPONENTS: false
};
//
@@ -146,6 +148,43 @@ target.generic = function() {
cleanupCSSSource(GENERIC_DIR + '/web/viewer.css');
};
+target.components = function() {
+ cd(ROOT_DIR);
+ echo();
+ echo('### Creating generic components');
+
+ rm('-rf', COMPONENTS_DIR);
+ mkdir('-p', COMPONENTS_DIR);
+ mkdir('-p', COMPONENTS_DIR + 'images');
+
+ var defines = builder.merge(DEFINES, {COMPONENTS: true});
+
+ var COMPONENTS_IMAGES = [
+ 'web/images/annotation-*.svg',
+ 'web/images/loading-icon.gif',
+ 'web/images/shadow.png',
+ 'web/images/texture.png',
+ ];
+
+ var setup = {
+ defines: defines,
+ copy: [
+ [COMPONENTS_IMAGES, COMPONENTS_DIR + 'images'],
+ ['web/compatibility.js', COMPONENTS_DIR],
+ ],
+ preprocess: [
+ ['web/pdf_viewer.component.js', COMPONENTS_DIR + 'pdf_viewer.js'],
+ ],
+ preprocessCSS: [
+ ['components', 'web/pdf_viewer.css', COMPONENTS_DIR + 'pdf_viewer.css'],
+ ]
+ };
+ builder.build(setup);
+
+ cleanupJSSource(COMPONENTS_DIR + 'pdf_viewer.js');
+ cleanupCSSSource(COMPONENTS_DIR + 'pdf_viewer.css');
+};
+
target.jsdoc = function() {
echo();
echo('### Generating jsdoc');
@@ -233,6 +272,7 @@ target.web = function() {
target.dist = function() {
target.generic();
target.singlefile();
+ target.components();
var DIST_DIR = BUILD_DIR + 'dist/';
var DIST_REPO_URL = 'https://github.com/mozilla/pdfjs-dist';
@@ -262,7 +302,7 @@ target.dist = function() {
mkdir('-p', DIST_DIR + 'web/');
cp('-R', [
- GENERIC_DIR + 'web/compatibility.js',
+ COMPONENTS_DIR + '*',
], DIST_DIR + 'web/');
echo();
diff --git a/web/interfaces.js b/web/interfaces.js
index 54c2825f0..5f0ad04c6 100644
--- a/web/interfaces.js
+++ b/web/interfaces.js
@@ -1,5 +1,5 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* Copyright 2012 Mozilla Foundation
+/* Copyright 2014 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -47,6 +47,10 @@ IPDFLinkService.prototype = {
* @param {string} hash
*/
setHash: function (hash) {},
+ /**
+ * @param {string} action
+ */
+ executeNamedAction: function (action) {},
};
/**
diff --git a/web/pdf_viewer.component.js b/web/pdf_viewer.component.js
new file mode 100644
index 000000000..22c483854
--- /dev/null
+++ b/web/pdf_viewer.component.js
@@ -0,0 +1,32 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* Copyright 2014 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*jshint globalstrict: false */
+/* globals PDFJS, PDFViewer */
+
+// Initializing PDFJS global object (if still undefined)
+if (typeof PDFJS === 'undefined') {
+ (typeof window !== 'undefined' ? window : this).PDFJS = {};
+}
+
+(function pdfViewerWrapper() {
+ 'use strict';
+
+//#include ui_utils.js
+//#include pdf_viewer.js
+
+ PDFJS.PDFViewer = PDFViewer;
+}).call((typeof window === 'undefined') ? this : window);
diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js
index 146c02e00..02304d01c 100644
--- a/web/pdf_viewer.js
+++ b/web/pdf_viewer.js
@@ -57,7 +57,7 @@ var PDFViewer = (function pdfViewer() {
function PDFViewer(options) {
this.container = options.container;
this.viewer = options.viewer || options.container.firstElementChild;
- this.linkService = options.linkService;
+ this.linkService = options.linkService || new SimpleLinkService(this);
this.defaultRenderingQueue = !options.renderingQueue;
if (this.defaultRenderingQueue) {
@@ -270,8 +270,12 @@ var PDFViewer = (function pdfViewer() {
}
});
+ var event = document.createEvent('CustomEvent');
+ event.initCustomEvent('pagesinit', true, true, null);
+ self.container.dispatchEvent(event);
+
if (this.defaultRenderingQueue) {
- firstPagePromise.then(this.update.bind(this));
+ this.update();
}
}.bind(this));
},
@@ -642,6 +646,53 @@ var PDFViewer = (function pdfViewer() {
return PDFViewer;
})();
+var SimpleLinkService = (function SimpleLinkServiceClosure() {
+ function SimpleLinkService(pdfViewer) {
+ this.pdfViewer = pdfViewer;
+ }
+ SimpleLinkService.prototype = {
+ /**
+ * @returns {number}
+ */
+ get page() {
+ return this.pdfViewer.currentPageNumber;
+ },
+ /**
+ * @param {number} value
+ */
+ set page(value) {
+ this.pdfViewer.currentPageNumber = value;
+ },
+ /**
+ * @param dest - The PDF destination object.
+ */
+ navigateTo: function (dest) {},
+ /**
+ * @param dest - The PDF destination object.
+ * @returns {string} The hyperlink to the PDF object.
+ */
+ getDestinationHash: function (dest) {
+ return '#';
+ },
+ /**
+ * @param hash - The PDF parameters/hash.
+ * @returns {string} The hyperlink to the PDF object.
+ */
+ getAnchorUrl: function (hash) {
+ return '#';
+ },
+ /**
+ * @param {string} hash
+ */
+ setHash: function (hash) {},
+ /**
+ * @param {string} action
+ */
+ executeNamedAction: function (action) {},
+ };
+ return SimpleLinkService;
+})();
+
/**
* PDFPage object source.
* @class