diff --git a/extensions/chrome/manifest.json b/extensions/chrome/manifest.json index 9b34437b2..63c77905a 100644 --- a/extensions/chrome/manifest.json +++ b/extensions/chrome/manifest.json @@ -1,11 +1,15 @@ { - "name": "uriloader@pdf.js", - "version": "0.1", - "description": "Read PDF Document", + "manifest_version": 2, + "name": "PDF Viewer", + "version": "PDFJSSCRIPT_VERSION", + "description": "Uses HTML5 to display PDF files directly in Chrome.", "permissions": [ "webRequest", "webRequestBlocking", "http://*/*.pdf", + "https://*/*.pdf", "file:///*/*.pdf" ], - "background_page": "pdfHandler.html" + "background": { + "page": "pdfHandler.html" + } } diff --git a/extensions/chrome/pdfHandler.html b/extensions/chrome/pdfHandler.html index 35375de73..7a64ecd16 100644 --- a/extensions/chrome/pdfHandler.html +++ b/extensions/chrome/pdfHandler.html @@ -14,30 +14,4 @@ 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. --> -<script> - -function isPdfDownloadable(details) { - return details.url.indexOf('pdfjs.action=download') >= 0; -} - -chrome.webRequest.onBeforeRequest.addListener( - function(details) { - if (isPdfDownloadable(details)) - return; - - var viewerPage = 'content/web/viewer.html'; - var url = chrome.extension.getURL(viewerPage) + - '?file=' + encodeURIComponent(details.url); - return { redirectUrl: url }; - }, - { - urls: [ - "http://*/*.pdf", - "file://*/*.pdf" - ], - types: [ "main_frame" ] - }, - ["blocking"]); - -</script> - +<script src="pdfHandler.js"></script> diff --git a/extensions/chrome/pdfHandler.js b/extensions/chrome/pdfHandler.js new file mode 100644 index 000000000..d1906ee69 --- /dev/null +++ b/extensions/chrome/pdfHandler.js @@ -0,0 +1,39 @@ +/* +Copyright 2012 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. +*/ + +function isPdfDownloadable(details) { + return details.url.indexOf('pdfjs.action=download') >= 0; +} + +chrome.webRequest.onBeforeRequest.addListener( + function(details) { + if (isPdfDownloadable(details)) + return; + + var viewerPage = 'content/web/viewer.html'; + var url = chrome.extension.getURL(viewerPage) + + '?file=' + encodeURIComponent(details.url); + return { redirectUrl: url }; + }, + { + urls: [ + 'http://*/*.pdf', + 'https://*/*.pdf', + 'file://*/*.pdf' + ], + types: ['main_frame'] + }, + ['blocking']); diff --git a/make.js b/make.js index 88fec48cf..807b3dd7c 100755 --- a/make.js +++ b/make.js @@ -581,7 +581,9 @@ target.chrome = function() { defines: defines, copy: [ [COMMON_WEB_FILES, CHROME_BUILD_CONTENT_DIR + '/web'], - [['extensions/chrome/*.json', 'extensions/chrome/*.html'], + [['extensions/chrome/*.json', + 'extensions/chrome/*.html', + 'extensions/chrome/*.js'], CHROME_BUILD_DIR], [BUILD_TARGET, CHROME_BUILD_CONTENT_DIR + BUILD_TARGET], ['external/webL10n/l10n.js', CHROME_BUILD_CONTENT_DIR + '/web'] @@ -593,6 +595,10 @@ target.chrome = function() { }; builder.build(setup); + // Update the build version number + sed('-i', /PDFJSSCRIPT_VERSION/, EXTENSION_VERSION, + CHROME_BUILD_DIR + '/manifest.json'); + // Bundle the files to a Chrome extension file .crx if path to key is set var pem = env['PDFJS_CHROME_KEY']; if (!pem) { diff --git a/web/viewer-snippet.html b/web/viewer-snippet.html index 3d535169e..294ecc294 100644 --- a/web/viewer-snippet.html +++ b/web/viewer-snippet.html @@ -2,7 +2,3 @@ <link rel="resource" type="application/l10n" href="locale.properties"/> <script type="text/javascript" src="l10n.js"></script> <script type="text/javascript" src="../build/pdf.js"></script> -<script type="text/javascript"> - // This specifies the location of the pdf.js file. - PDFJS.workerSrc = "../build/pdf.js"; -</script> diff --git a/web/viewer.html b/web/viewer.html index 0ad48703e..2b705b72f 100644 --- a/web/viewer.html +++ b/web/viewer.html @@ -29,7 +29,7 @@ limitations under the License. <link rel="resource" type="application/l10n" href="locale.properties"/> <!--#endif--> -<!--#if !(FIREFOX || MOZCENTRAL)--> +<!--#if !(FIREFOX || MOZCENTRAL || CHROME)--> <script type="text/javascript" src="compatibility.js"></script> <!--#endif--> @@ -82,13 +82,13 @@ limitations under the License. <div id="sidebarContainer"> <div id="toolbarSidebar" class="splitToolbarButton toggled"> - <button id="viewThumbnail" class="toolbarButton group toggled" title="Show Thumbnails" onclick="PDFView.switchSidebarView('thumbs')" tabindex="1" data-l10n-id="thumbs"> + <button id="viewThumbnail" class="toolbarButton group toggled" title="Show Thumbnails" tabindex="1" data-l10n-id="thumbs"> <span data-l10n-id="thumbs_label">Thumbnails</span> </button> - <button id="viewOutline" class="toolbarButton group" title="Show Document Outline" onclick="PDFView.switchSidebarView('outline')" tabindex="2" data-l10n-id="outline"> + <button id="viewOutline" class="toolbarButton group" title="Show Document Outline" tabindex="2" data-l10n-id="outline"> <span data-l10n-id="outline_label">Document Outline</span> </button> - <button id="viewSearch" class="toolbarButton group hidden" title="Search Document" onclick="PDFView.switchSidebarView('search')" tabindex="3" data-l10n-id="search_panel"> + <button id="viewSearch" class="toolbarButton group hidden" title="Search Document" tabindex="3" data-l10n-id="search_panel"> <span data-l10n-id="search_panel_label">Search Document</span> </button> </div> @@ -99,8 +99,8 @@ limitations under the License. </div> <div id="searchView" class="hidden"> <div id="searchToolbar"> - <input id="searchTermsInput" class="toolbarField" onkeydown='if (event.keyCode == 13) PDFView.search()'> - <button id="searchButton" class="textButton toolbarButton" onclick='PDFView.search()' data-l10n-id="search">Find</button> + <input id="searchTermsInput" class="toolbarField"> + <button id="searchButton" class="textButton toolbarButton" data-l10n-id="search">Find</button> </div> <div id="searchResults"></div> </div> @@ -118,16 +118,16 @@ limitations under the License. </button> <div class="toolbarButtonSpacer"></div> <div class="splitToolbarButton"> - <button class="toolbarButton pageUp" title="Previous Page" onclick="PDFView.page--" id="previous" tabindex="5" data-l10n-id="previous"> + <button class="toolbarButton pageUp" title="Previous Page" id="previous" tabindex="5" data-l10n-id="previous"> <span data-l10n-id="previous_label">Previous</span> </button> <div class="splitToolbarButtonSeparator"></div> - <button class="toolbarButton pageDown" title="Next Page" onclick="PDFView.page++" id="next" tabindex="6" data-l10n-id="next"> + <button class="toolbarButton pageDown" title="Next Page" id="next" tabindex="6" data-l10n-id="next"> <span data-l10n-id="next_label">Next</span> </button> </div> <label id="pageNumberLabel" class="toolbarLabel" for="pageNumber" data-l10n-id="page_label">Page: </label> - <input type="number" id="pageNumber" class="toolbarField pageNumber" onchange="PDFView.page = this.value;" value="1" size="4" min="1" tabindex="7"> + <input type="number" id="pageNumber" class="toolbarField pageNumber" value="1" size="4" min="1" tabindex="7"> </input> <span id="numPages" class="toolbarLabel"></span> </div> @@ -135,19 +135,19 @@ limitations under the License. <input id="fileInput" class="fileInput" type="file" oncontextmenu="return false;" style="visibility: hidden; position: fixed; right: 0; top: 0" /> - <button id="fullscreen" class="toolbarButton fullscreen" title="Fullscreen" tabindex="11" data-l10n-id="fullscreen" onclick="PDFView.fullscreen();"> + <button id="fullscreen" class="toolbarButton fullscreen" title="Fullscreen" tabindex="11" data-l10n-id="fullscreen"> <span data-l10n-id="fullscreen_label">Fullscreen</span> </button> - <button id="openFile" class="toolbarButton openFile" title="Open File" tabindex="12" data-l10n-id="open_file" onclick="document.getElementById('fileInput').click()"> + <button id="openFile" class="toolbarButton openFile" title="Open File" tabindex="12" data-l10n-id="open_file"> <span data-l10n-id="open_file_label">Open</span> </button> - <button id="print" class="toolbarButton print" title="Print" tabindex="13" data-l10n-id="print" onclick="window.print()"> + <button id="print" class="toolbarButton print" title="Print" tabindex="13" data-l10n-id="print"> <span data-l10n-id="print_label">Print</span> </button> - <button id="download" class="toolbarButton download" title="Download" onclick="PDFView.download();" tabindex="14" data-l10n-id="download"> + <button id="download" class="toolbarButton download" title="Download" tabindex="14" data-l10n-id="download"> <span data-l10n-id="download_label">Download</span> </button> <!-- <div class="toolbarButtonSpacer"></div> --> @@ -156,16 +156,16 @@ limitations under the License. <div class="outerCenter"> <div class="innerCenter" id="toolbarViewerMiddle"> <div class="splitToolbarButton"> - <button class="toolbarButton zoomOut" title="Zoom Out" onclick="PDFView.zoomOut();" tabindex="8" data-l10n-id="zoom_out"> + <button class="toolbarButton zoomOut" title="Zoom Out" tabindex="8" data-l10n-id="zoom_out"> <span data-l10n-id="zoom_out_label">Zoom Out</span> </button> <div class="splitToolbarButtonSeparator"></div> - <button class="toolbarButton zoomIn" title="Zoom In" onclick="PDFView.zoomIn();" tabindex="9" data-l10n-id="zoom_in"> + <button class="toolbarButton zoomIn" title="Zoom In" tabindex="9" data-l10n-id="zoom_in"> <span data-l10n-id="zoom_in_label">Zoom In</span> </button> </div> <span id="scaleSelectContainer" class="dropdownToolbarButton"> - <select id="scaleSelect" onchange="PDFView.parseScale(this.value);" title="Zoom" oncontextmenu="return false;" tabindex="10" data-l10n-id="zoom"> + <select id="scaleSelect" title="Zoom" oncontextmenu="return false;" tabindex="10" data-l10n-id="zoom"> <option id="pageAutoOption" value="auto" selected="selected" data-l10n-id="page_scale_auto">Automatic Zoom</option> <option id="pageActualOption" value="page-actual" data-l10n-id="page_scale_actual">Actual Size</option> <option id="pageFitOption" value="page-fit" data-l10n-id="page_scale_fit">Fit Page</option> diff --git a/web/viewer.js b/web/viewer.js index 31d15f31d..27002fabf 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -35,6 +35,7 @@ var RenderingStates = { FINISHED: 3 }; +PDFJS.workerSrc = '../build/pdf.js'; var mozL10n = document.mozL10n || document.webL10n; @@ -1938,6 +1939,84 @@ document.addEventListener('DOMContentLoaded', function webViewerLoad(evt) { PDFView.renderHighestPriority(); }); + document.getElementById('viewThumbnail').addEventListener('click', + function() { + PDFView.switchSidebarView('thumbs'); + }); + + document.getElementById('viewOutline').addEventListener('click', + function() { + PDFView.switchSidebarView('outline'); + }); + + document.getElementById('viewSearch').addEventListener('click', + function() { + PDFView.switchSidebarView('search'); + }); + + document.getElementById('searchButton').addEventListener('click', + function() { + PDFView.search(); + }); + + document.getElementById('previous').addEventListener('click', + function() { + PDFView.page--; + }); + + document.getElementById('next').addEventListener('click', + function() { + PDFView.page++; + }); + + document.querySelector('.zoomIn').addEventListener('click', + function() { + PDFView.zoomIn(); + }); + + document.querySelector('.zoomOut').addEventListener('click', + function() { + PDFView.zoomOut(); + }); + + document.getElementById('fullscreen').addEventListener('click', + function() { + PDFView.fullscreen(); + }); + + document.getElementById('openFile').addEventListener('click', + function() { + document.getElementById('fileInput').click(); + }); + + document.getElementById('print').addEventListener('click', + function() { + window.print(); + }); + + document.getElementById('download').addEventListener('click', + function() { + PDFView.download(); + }); + + document.getElementById('searchTermsInput').addEventListener('keydown', + function() { + if (event.keyCode == 13) { + PDFView.search(); + } + }); + + document.getElementById('pageNumber').addEventListener('change', + function() { + PDFView.page = this.value; + }); + + document.getElementById('scaleSelect').addEventListener('change', + function() { + PDFView.parseScale(this.value); + }); + + //#if (FIREFOX || MOZCENTRAL) //if (FirefoxCom.requestSync('getLoadingType') == 'passive') { // PDFView.setTitleUsingUrl(file);