Browse Source

Loading extension resources via stringbundle

Yury Delendik 13 years ago
parent
commit
6323c8e084
  1. 1
      extensions/chrome/.gitignore
  2. 2
      extensions/firefox/.gitignore
  3. 3
      extensions/firefox/chrome.manifest
  4. 39
      extensions/firefox/components/PdfStreamConverter.js
  5. 55
      make.js
  6. 5
      web/viewer.js

1
extensions/chrome/.gitignore vendored

@ -0,0 +1 @@
content/

2
extensions/firefox/.gitignore vendored

@ -1,2 +1,4 @@
content/ content/
metadata.inc metadata.inc
chrome.manifest.inc
locale/

3
extensions/firefox/chrome.manifest

@ -0,0 +1,3 @@
# Additional resources for pdf.js
# PDFJS_SUPPORTED_LOCALES

39
extensions/firefox/components/PdfStreamConverter.js

@ -4,6 +4,10 @@
'use strict'; 'use strict';
var EXPORTED_SYMBOLS = ['PdfStreamConverter']; var EXPORTED_SYMBOLS = ['PdfStreamConverter'];
var DEFAULT_LOCALE = 'en-US';
var IS_MOZCENTRAL = false; // PDFJS_SUPPORTED_LOCALES
var SUPPORTED_LOCALES = [DEFAULT_LOCALE]; // PDFJS_SUPPORTED_LOCALES
const Cc = Components.classes; const Cc = Components.classes;
const Ci = Components.interfaces; const Ci = Components.interfaces;
@ -59,6 +63,28 @@ function getDOMWindow(aChannel) {
return win; return win;
} }
function getLocalizedStrings(path) {
var stringBundle = Cc["@mozilla.org/intl/stringbundle;1"].
getService(Ci.nsIStringBundleService).
createBundle("chrome://pdfviewer/locale/" + path);
var map = {};
var enumerator = stringBundle.getSimpleEnumeration();
while (enumerator.hasMoreElements()) {
var string = enumerator.getNext().QueryInterface(Ci.nsIPropertyElement);
var key = string.key, property = 'textContent';
var i = key.lastIndexOf('.');
if (i >= 0) {
property = key.substring(i + 1);
key = key.substring(0, i);
}
if (!(key in map))
map[key] = {};
map[key][property] = string.value;
}
return map;
}
// All the priviledged actions. // All the priviledged actions.
function ChromeActions() { function ChromeActions() {
this.inPrivateBrowswing = privateBrowsing.privateBrowsingEnabled; this.inPrivateBrowswing = privateBrowsing.privateBrowsingEnabled;
@ -113,6 +139,19 @@ ChromeActions.prototype = {
getLocale: function() { getLocale: function() {
return getStringPref('general.useragent.locale', 'en-US'); return getStringPref('general.useragent.locale', 'en-US');
}, },
getStrings: function(data) {
try {
// Lazy initialization of localizedStrings
if (!('localizedStrings' in this))
this.localizedStrings = getLocalizedStrings('viewer.properties');
var result = this.localizedStrings[data];
return JSON.stringify(result || null)
} catch (e) {
log('Unable to retrive localized strings: ' + e);
return 'null';
}
},
pdfBugEnabled: function() { pdfBugEnabled: function() {
return getBoolPref(EXT_PREFIX + '.pdfBugEnabled', false); return getBoolPref(EXT_PREFIX + '.pdfBugEnabled', false);
} }

55
make.js

@ -6,6 +6,7 @@ var ROOT_DIR = __dirname + '/', // absolute path to project's root
BUILD_TARGET = BUILD_DIR + 'pdf.js', BUILD_TARGET = BUILD_DIR + 'pdf.js',
FIREFOX_BUILD_DIR = BUILD_DIR + '/firefox/', FIREFOX_BUILD_DIR = BUILD_DIR + '/firefox/',
EXTENSION_SRC_DIR = 'extensions/', EXTENSION_SRC_DIR = 'extensions/',
LOCALE_SRC_DIR = 'l10n/',
GH_PAGES_DIR = BUILD_DIR + 'gh-pages/', GH_PAGES_DIR = BUILD_DIR + 'gh-pages/',
REPO = 'git@github.com:mozilla/pdf.js.git', REPO = 'git@github.com:mozilla/pdf.js.git',
PYTHON_BIN = 'python2.7'; PYTHON_BIN = 'python2.7';
@ -67,8 +68,9 @@ target.web = function() {
// Creates localized resources for the viewer and extension. // Creates localized resources for the viewer and extension.
// //
target.locale = function() { target.locale = function() {
var L10N_PATH = 'l10n';
var METADATA_OUTPUT = 'extensions/firefox/metadata.inc'; var METADATA_OUTPUT = 'extensions/firefox/metadata.inc';
var CHROME_MANIFEST_OUTPUT = 'extensions/firefox/chrome.manifest.inc';
var EXTENSION_LOCALE_OUTPUT = 'extensions/firefox/locale';
var VIEWER_OUTPUT = 'web/locale.properties'; var VIEWER_OUTPUT = 'web/locale.properties';
var DEFAULT_LOCALE = 'en-US'; var DEFAULT_LOCALE = 'en-US';
@ -76,13 +78,17 @@ target.locale = function() {
echo(); echo();
echo('### Building localization files'); echo('### Building localization files');
var subfolders = ls(L10N_PATH); rm('-rf', EXTENSION_LOCALE_OUTPUT);
mkdir('-p', EXTENSION_LOCALE_OUTPUT);
var subfolders = ls(LOCALE_SRC_DIR);
subfolders.sort(); subfolders.sort();
var metadataContent = ''; var metadataContent = '';
var chromeManifestContent = '';
var viewerOutput = ''; var viewerOutput = '';
for (var i = 0; i < subfolders.length; i++) { for (var i = 0; i < subfolders.length; i++) {
var locale = subfolders[i]; var locale = subfolders[i];
var path = L10N_PATH + '/' + locale; var path = LOCALE_SRC_DIR + locale;
if (!test('-d', path)) if (!test('-d', path))
continue; continue;
@ -91,12 +97,13 @@ target.locale = function() {
continue; continue;
} }
mkdir('-p', EXTENSION_LOCALE_OUTPUT + '/' + locale);
chromeManifestContent += 'locale pdfviewer ' + locale + ' locale/' + locale + '/\n';
if (test('-f', path + '/viewer.properties')) { if (test('-f', path + '/viewer.properties')) {
var properties = cat(path + '/viewer.properties'); var properties = cat(path + '/viewer.properties');
if (locale == DEFAULT_LOCALE) viewerOutput += '[' + locale + ']\n' + properties + '\n';
viewerOutput = '[*]\n' + properties + '\n' + viewerOutput; cp(path + '/viewer.properties', EXTENSION_LOCALE_OUTPUT + '/' + locale);
else
viewerOutput = viewerOutput + '[' + locale + ']\n' + properties + '\n';
} }
if (test('-f', path + '/metadata.inc')) { if (test('-f', path + '/metadata.inc')) {
@ -106,6 +113,7 @@ target.locale = function() {
} }
viewerOutput.to(VIEWER_OUTPUT); viewerOutput.to(VIEWER_OUTPUT);
metadataContent.to(METADATA_OUTPUT); metadataContent.to(METADATA_OUTPUT);
chromeManifestContent.to(CHROME_MANIFEST_OUTPUT);
}; };
// //
@ -227,7 +235,7 @@ var EXTENSION_WEB_FILES =
'web/viewer.css', 'web/viewer.css',
'web/viewer.js', 'web/viewer.js',
'web/viewer.html', 'web/viewer.html',
'external/webL10n/l10n.js', 'extensions/firefox/tools/l10n.js',
'web/viewer-production.html'], 'web/viewer-production.html'],
EXTENSION_BASE_VERSION = 'f0f0418a9c6637981fe1182b9212c2d592774c7d', EXTENSION_BASE_VERSION = 'f0f0418a9c6637981fe1182b9212c2d592774c7d',
EXTENSION_VERSION_PREFIX = '0.3.', EXTENSION_VERSION_PREFIX = '0.3.',
@ -277,21 +285,23 @@ target.firefox = function() {
'*.rdf', '*.rdf',
'*.svg', '*.svg',
'*.png', '*.png',
'*.manifest',
'components', 'components',
'locale',
'../../LICENSE'], '../../LICENSE'],
FIREFOX_EXTENSION_FILES = FIREFOX_EXTENSION_FILES =
['bootstrap.js', ['bootstrap.js',
'install.rdf', 'install.rdf',
'chrome.manifest',
'icon.png', 'icon.png',
'icon64.png', 'icon64.png',
'components', 'components',
'content', 'content',
'locale',
'LICENSE'], 'LICENSE'],
FIREFOX_EXTENSION_NAME = 'pdf.js.xpi', FIREFOX_EXTENSION_NAME = 'pdf.js.xpi',
FIREFOX_AMO_EXTENSION_NAME = 'pdf.js.amo.xpi'; FIREFOX_AMO_EXTENSION_NAME = 'pdf.js.amo.xpi';
var LOCALE_CONTENT = cat('web/locale.properties');
target.production(); target.production();
target.buildnumber(); target.buildnumber();
cd(ROOT_DIR); cd(ROOT_DIR);
@ -310,7 +320,6 @@ target.firefox = function() {
// Copy a standalone version of pdf.js inside the content directory // Copy a standalone version of pdf.js inside the content directory
cp(BUILD_TARGET, FIREFOX_BUILD_CONTENT_DIR + BUILD_DIR); cp(BUILD_TARGET, FIREFOX_BUILD_CONTENT_DIR + BUILD_DIR);
cp('-R', EXTENSION_WEB_FILES, FIREFOX_BUILD_CONTENT_DIR + '/web'); cp('-R', EXTENSION_WEB_FILES, FIREFOX_BUILD_CONTENT_DIR + '/web');
cp('web/locale.properties', FIREFOX_BUILD_CONTENT_DIR + '/web');
rm(FIREFOX_BUILD_CONTENT_DIR + '/web/viewer-production.html'); rm(FIREFOX_BUILD_CONTENT_DIR + '/web/viewer-production.html');
// Copy over the firefox extension snippet so we can inline pdf.js in it // Copy over the firefox extension snippet so we can inline pdf.js in it
@ -319,7 +328,6 @@ target.firefox = function() {
// Modify the viewer so it does all the extension-only stuff. // Modify the viewer so it does all the extension-only stuff.
cd(FIREFOX_BUILD_CONTENT_DIR + '/web'); cd(FIREFOX_BUILD_CONTENT_DIR + '/web');
sed('-i', /.*PDFJSSCRIPT_INCLUDE_BUNDLE.*\n/, cat(ROOT_DIR + BUILD_TARGET), 'viewer-snippet-firefox-extension.html'); sed('-i', /.*PDFJSSCRIPT_INCLUDE_BUNDLE.*\n/, cat(ROOT_DIR + BUILD_TARGET), 'viewer-snippet-firefox-extension.html');
sed('-i', /.*PDFJSSCRIPT_LOCALE_DATA.*\n/, LOCALE_CONTENT, 'viewer-snippet-firefox-extension.html');
sed('-i', /.*PDFJSSCRIPT_REMOVE_CORE.*\n/g, '', 'viewer.html'); sed('-i', /.*PDFJSSCRIPT_REMOVE_CORE.*\n/g, '', 'viewer.html');
sed('-i', /.*PDFJSSCRIPT_REMOVE_FIREFOX_EXTENSION.*\n/g, '', 'viewer.html'); sed('-i', /.*PDFJSSCRIPT_REMOVE_FIREFOX_EXTENSION.*\n/g, '', 'viewer.html');
sed('-i', /.*PDFJSSCRIPT_INCLUDE_FIREFOX_EXTENSION.*\n/, cat('viewer-snippet-firefox-extension.html'), 'viewer.html'); sed('-i', /.*PDFJSSCRIPT_INCLUDE_FIREFOX_EXTENSION.*\n/, cat('viewer-snippet-firefox-extension.html'), 'viewer.html');
@ -328,7 +336,6 @@ target.firefox = function() {
// We don't need pdf.js anymore since its inlined // We don't need pdf.js anymore since its inlined
rm('-Rf', FIREFOX_BUILD_CONTENT_DIR + BUILD_DIR); rm('-Rf', FIREFOX_BUILD_CONTENT_DIR + BUILD_DIR);
rm(FIREFOX_BUILD_CONTENT_DIR + '/web/viewer-snippet-firefox-extension.html'); rm(FIREFOX_BUILD_CONTENT_DIR + '/web/viewer-snippet-firefox-extension.html');
rm(FIREFOX_BUILD_CONTENT_DIR + '/web/locale.properties');
// Remove '.DS_Store' and other hidden files // Remove '.DS_Store' and other hidden files
find(FIREFOX_BUILD_DIR).forEach(function(file) { find(FIREFOX_BUILD_DIR).forEach(function(file) {
if (file.match(/^\./)) if (file.match(/^\./))
@ -342,6 +349,8 @@ target.firefox = function() {
// Update localized metadata // Update localized metadata
var localizedMetadata = cat(EXTENSION_SRC_DIR + '/firefox/metadata.inc'); var localizedMetadata = cat(EXTENSION_SRC_DIR + '/firefox/metadata.inc');
sed('-i', /.*PDFJS_LOCALIZED_METADATA.*\n/, localizedMetadata, FIREFOX_BUILD_DIR + '/install.rdf'); sed('-i', /.*PDFJS_LOCALIZED_METADATA.*\n/, localizedMetadata, FIREFOX_BUILD_DIR + '/install.rdf');
var chromeManifest = cat(EXTENSION_SRC_DIR + '/firefox/chrome.manifest.inc');
sed('-i', /.*PDFJS_SUPPORTED_LOCALES.*\n/, chromeManifest, FIREFOX_BUILD_DIR + '/chrome.manifest');
// Create the xpi // Create the xpi
cd(FIREFOX_BUILD_DIR); cd(FIREFOX_BUILD_DIR);
@ -365,25 +374,27 @@ target.mozcentral = function() {
echo(); echo();
echo('### Building mozilla-central extension'); echo('### Building mozilla-central extension');
var MOZCENTRAL_DIR = BUILD_DIR + '/mozcentral', var MOZCENTRAL_DIR = BUILD_DIR + 'mozcentral/',
MOZCENTRAL_CONTENT_DIR = MOZCENTRAL_DIR + '/content/', MOZCENTRAL_EXTENSION_DIR = MOZCENTRAL_DIR + 'browser/app/profile/extensions/uriloader@pdf.js/',
MOZCENTRAL_L10N_DIR = MOZCENTRAL_DIR + '/l10n/', MOZCENTRAL_CONTENT_DIR = MOZCENTRAL_EXTENSION_DIR + 'content/',
MOZCENTRAL_L10N_DIR = MOZCENTRAL_DIR + 'browser/locales/en-US/pdfviewer/',
FIREFOX_CONTENT_DIR = EXTENSION_SRC_DIR + '/firefox/content/', FIREFOX_CONTENT_DIR = EXTENSION_SRC_DIR + '/firefox/content/',
FIREFOX_EXTENSION_FILES_TO_COPY = FIREFOX_EXTENSION_FILES_TO_COPY =
['*.js', ['*.js',
'*.svg', '*.svg',
'*.png', '*.png',
'*.manifest',
'install.rdf.in', 'install.rdf.in',
'README.mozilla', 'README.mozilla',
'components', 'components',
'../../LICENSE'], '../../LICENSE'],
DEFAULT_LOCALE_FILES = DEFAULT_LOCALE_FILES =
['l10n/en-US/viewer.properties', [LOCALE_SRC_DIR + 'en-US/viewer.properties'],
'l10n/en-US/metadata.inc'],
FIREFOX_MC_EXTENSION_FILES = FIREFOX_MC_EXTENSION_FILES =
['bootstrap.js', ['bootstrap.js',
'icon.png', 'icon.png',
'icon64.png', 'icon64.png',
'chrome.manifest',
'components', 'components',
'content', 'content',
'LICENSE']; 'LICENSE'];
@ -401,7 +412,7 @@ target.mozcentral = function() {
// Copy extension files // Copy extension files
cd('extensions/firefox'); cd('extensions/firefox');
cp('-R', FIREFOX_EXTENSION_FILES_TO_COPY, ROOT_DIR + MOZCENTRAL_DIR); cp('-R', FIREFOX_EXTENSION_FILES_TO_COPY, ROOT_DIR + MOZCENTRAL_EXTENSION_DIR);
cd(ROOT_DIR); cd(ROOT_DIR);
// Copy a standalone version of pdf.js inside the content directory // Copy a standalone version of pdf.js inside the content directory
@ -433,11 +444,11 @@ target.mozcentral = function() {
cp(DEFAULT_LOCALE_FILES, MOZCENTRAL_L10N_DIR); cp(DEFAULT_LOCALE_FILES, MOZCENTRAL_L10N_DIR);
// Update the build version number // Update the build version number
sed('-i', /PDFJSSCRIPT_VERSION/, EXTENSION_VERSION, MOZCENTRAL_DIR + '/install.rdf.in'); sed('-i', /PDFJSSCRIPT_VERSION/, EXTENSION_VERSION, MOZCENTRAL_EXTENSION_DIR + 'install.rdf.in');
sed('-i', /PDFJSSCRIPT_VERSION/, EXTENSION_VERSION, MOZCENTRAL_DIR + '/README.mozilla'); sed('-i', /PDFJSSCRIPT_VERSION/, EXTENSION_VERSION, MOZCENTRAL_EXTENSION_DIR + 'README.mozilla');
// List all files for mozilla-central // List all files for mozilla-central
cd(MOZCENTRAL_DIR); cd(MOZCENTRAL_EXTENSION_DIR);
var extensionFiles = ''; var extensionFiles = '';
find(FIREFOX_MC_EXTENSION_FILES).forEach(function(file){ find(FIREFOX_MC_EXTENSION_FILES).forEach(function(file){
if (test('-f', file)) if (test('-f', file))

5
web/viewer.js

@ -1362,11 +1362,12 @@ window.addEventListener('load', function webViewerLoad(evt) {
if ('disableWorker' in hashParams) if ('disableWorker' in hashParams)
PDFJS.disableWorker = (hashParams['disableWorker'] === 'true'); PDFJS.disableWorker = (hashParams['disableWorker'] === 'true');
var locale = !PDFJS.isFirefoxExtension ? navigator.language : if (!PDFJS.isFirefoxExtension) {
FirefoxCom.request('getLocale', null); var locale = navigator.language;
if ('locale' in hashParams) if ('locale' in hashParams)
locale = hashParams['locale']; locale = hashParams['locale'];
mozL10n.language.code = locale; mozL10n.language.code = locale;
}
if ('disableTextLayer' in hashParams) if ('disableTextLayer' in hashParams)
PDFJS.disableTextLayer = (hashParams['disableTextLayer'] === 'true'); PDFJS.disableTextLayer = (hashParams['disableTextLayer'] === 'true');

Loading…
Cancel
Save