diff --git a/make.js b/make.js index 727e740ca..cc6274fac 100755 --- a/make.js +++ b/make.js @@ -1,5 +1,7 @@ #!/usr/bin/env node require('./external/shelljs/make'); +var fs = require('fs'); +var vm = require('vm'); var ROOT_DIR = __dirname + '/', // absolute path to project's root BUILD_DIR = 'build/', @@ -15,6 +17,49 @@ var ROOT_DIR = __dirname + '/', // absolute path to project's root MOZCENTRAL_STREAM_CONVERTER_ID = 'd0c5195d-e798-49d4-b1d3-9324328b2291', FIREFOX_STREAM_CONVERTER_ID = '6457a96b-2d68-439a-bcfa-44465fbcdbb1'; +function preprocess(inFilename, outFilename, flags) { + // TODO make this really read line by line. + var lines = fs.readFileSync(inFilename).toString().split("\n"); + var totalLines = lines.length; + var out = ''; + var i = 0; + function readLine() { + if (i < totalLines) { + return lines[i++]; + } + return null; + } + function writeLine(line) { + out += line + '\n'; + } + + var s, state = 0, stack = []; + while ((s = readLine()) !== null) { + var m = new RegExp(/^\/\/\s*#(if|else|endif)\b(?:\s+(.*))?/).exec(s); + if (m) { + if (m[1] === "if") { + stack.push(state); + state = vm.runInNewContext(m[2], flags) ? 3 : 1; + } else if (m[1] === "else") { + state = state === 1 ? 3 : 2; + } else { + state = stack.pop(); + } + } else { + if (state === 0) { + writeLine(s); + } else if(state === 3) { + writeLine(s.replace(/^\/\//g, " ")); + } + } + } + fs.writeFileSync(outFilename, out); +} + +target.pre = function() { + preprocess('in.txt', 'out.txt', {B2G: true}); +} + // // make all // @@ -482,6 +527,49 @@ target.mozcentral = function() { cp('-Rf', 'test/mozcentral/*', MOZCENTRAL_TEST_DIR); }; +target.b2g = function() { + echo(); + echo('### Building B2G (Firefox OS App)'); + var B2G_BUILD_DIR = BUILD_DIR + '/b2g/', + B2G_BUILD_CONTENT_DIR = B2G_BUILD_DIR + '/content/'; + target.production(); + target.buildnumber(); + + // Clear out everything in the b2g build directory + cd(ROOT_DIR); + rm('-Rf', B2G_BUILD_DIR); + mkdir('-p', B2G_BUILD_CONTENT_DIR); + mkdir('-p', B2G_BUILD_CONTENT_DIR + BUILD_DIR); + mkdir('-p', B2G_BUILD_CONTENT_DIR + '/web'); + + // Copy a standalone version of pdf.js inside the content directory + cp(BUILD_TARGET, B2G_BUILD_CONTENT_DIR + BUILD_DIR); + cp('-R', EXTENSION_WEB_FILES, B2G_BUILD_CONTENT_DIR + '/web'); + cp('web/viewer-snippet-b2g.html', B2G_BUILD_CONTENT_DIR + '/web/'); + // Replacing the l10n.js file with regular gh-pages one + rm(B2G_BUILD_CONTENT_DIR + '/web/l10n.js'); + cp('external/webL10n/l10n.js', B2G_BUILD_CONTENT_DIR + '/web'); + cp('web/locale.properties', B2G_BUILD_CONTENT_DIR + '/web'); + + mv('-f', B2G_BUILD_CONTENT_DIR + '/web/viewer-production.html', + B2G_BUILD_CONTENT_DIR + '/web/viewer.html'); + cd(B2G_BUILD_CONTENT_DIR + '/web'); + sed('-i', /.*PDFJSSCRIPT_INCLUDE_B2G.*\n/, cat('viewer-snippet-b2g.html'), 'viewer.html'); + rm('viewer-snippet-b2g.html'); + cd(ROOT_DIR); + + var flags = { + B2G: true + }; + var prep = [ + B2G_BUILD_CONTENT_DIR + '/web/viewer.js', + B2G_BUILD_CONTENT_DIR + '/build/pdf.js' + ]; + for (var i in prep) { + preprocess(prep[i], prep[i], flags); + } +}; + // // make chrome // diff --git a/src/core.js b/src/core.js index e8d008074..6d051b152 100644 --- a/src/core.js +++ b/src/core.js @@ -29,9 +29,11 @@ function getPdf(arg, callback) { var params = arg; if (typeof arg === 'string') params = { url: arg }; - +//#if !B2G var xhr = new XMLHttpRequest(); - +//#else +//var xhr = new XMLHttpRequest({mozSystem: true}); +//#endif xhr.open('GET', params.url); var headers = params.headers; diff --git a/web/viewer.html b/web/viewer.html index 58b35464f..d7a57fee4 100644 --- a/web/viewer.html +++ b/web/viewer.html @@ -38,6 +38,7 @@ + diff --git a/web/viewer.js b/web/viewer.js index 4de66b5af..f6874f9a9 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -1880,8 +1880,9 @@ window.addEventListener('load', function webViewerLoad(evt) { PDFView.sidebarOpen = outerContainer.classList.contains('sidebarOpen'); PDFView.renderHighestPriority(); }); - +//#if !B2G PDFView.open(file, 0); +//#endif }, true); function updateViewarea() { @@ -2140,3 +2141,21 @@ window.addEventListener('afterprint', function afterPrint(evt) { window.addEventListener('mozfullscreenchange', fullscreenChange, false); window.addEventListener('webkitfullscreenchange', fullscreenChange, false); })(); + +//#if B2G +// window.navigator.mozSetMessageHandler('activity', function(activity) { +// var url = activity.source.data.url; +// // Temporarily get the data here since the cross domain xhr is broken in +// // the worker currently, see bug 761227. +// var params = { +// url: url, +// error: function(e) { +// PDFView.error(mozL10n.get('loading_error', null, +// 'An error occurred while loading the PDF.'), e); +// } +// }; +// PDFJS.getPdf(params, function successCallback(data) { +// PDFView.open(data, 0); +// }); +// }); +//#endif