Merge pull request #9034 from Snuffleupagus/javascript-null

[api-major] Change `getJavaScript` to return `null`, rather than an empty Array, when no JavaScript exists
This commit is contained in:
Tim van der Meij 2017-10-17 21:58:45 +02:00 committed by GitHub
commit 17cc94db4e
4 changed files with 16 additions and 8 deletions

View File

@ -371,7 +371,7 @@ var Catalog = (function CatalogClosure() {
var xref = this.xref;
var obj = this.catDict.get('Names');
var javaScript = [];
let javaScript = null;
function appendIfJavaScriptDict(jsDict) {
var type = jsDict.get('S');
if (!isName(type, 'JavaScript')) {
@ -383,6 +383,9 @@ var Catalog = (function CatalogClosure() {
} else if (!isString(js)) {
return;
}
if (!javaScript) {
javaScript = [];
}
javaScript.push(stringToPDFString(js));
}
if (obj && obj.has('JavaScript')) {
@ -407,6 +410,9 @@ var Catalog = (function CatalogClosure() {
// but is supported by many PDF readers/writers (including Adobe's).
var action = openactionDict.get('N');
if (isName(action, 'Print')) {
if (!javaScript) {
javaScript = [];
}
javaScript.push('print({});');
}
} else {

View File

@ -574,10 +574,10 @@ var PDFDocumentProxy = (function PDFDocumentProxyClosure() {
return this.transport.getAttachments();
},
/**
* @return {Promise} A promise that is resolved with an array of all the
* JavaScript strings in the name tree.
* @return {Promise} A promise that is resolved with an {Array} of all the
* JavaScript strings in the name tree, or `null` if no JavaScript exists.
*/
getJavaScript: function PDFDocumentProxy_getJavaScript() {
getJavaScript() {
return this.transport.getJavaScript();
},
/**

View File

@ -683,7 +683,7 @@ describe('api', function() {
it('gets javascript', function(done) {
var promise = doc.getJavaScript();
promise.then(function (data) {
expect(data).toEqual([]);
expect(data).toEqual(null);
done();
}).catch(function (reason) {
done.fail(reason);

View File

@ -1035,10 +1035,12 @@ let PDFViewerApplication = {
return;
}
pdfDocument.getJavaScript().then((javaScript) => {
if (javaScript.length) {
if (!javaScript) {
return;
}
console.warn('Warning: JavaScript is not supported');
this.fallback(UNSUPPORTED_FEATURES.javaScript);
}
// Hack to support auto printing.
let regex = /\bprint\s*\(/;
for (let i = 0, ii = javaScript.length; i < ii; i++) {