Skip to content

Commit

Permalink
Annotations: move operator list addition logic to src/core/document.js
Browse files Browse the repository at this point in the history
Ideally, the `Annotation` class should not have anything to do with the
page's operator list. How annotations are added to the page's operator
list is logic that belongs in `src/core/document.js` instead where the
operator list is constructed.

Moreover, some comments have been added to clarify the intent of the
code.
  • Loading branch information
timvandermeij committed Feb 15, 2017
1 parent da08b80 commit f663be3
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 24 deletions.
19 changes: 0 additions & 19 deletions src/core/annotation.js
Original file line number Diff line number Diff line change
Expand Up @@ -451,25 +451,6 @@ var Annotation = (function AnnotationClosure() {
}
};

Annotation.appendToOperatorList = function Annotation_appendToOperatorList(
annotations, opList, partialEvaluator, task, intent, renderForms) {
var annotationPromises = [];
for (var i = 0, n = annotations.length; i < n; ++i) {
if ((intent === 'display' && annotations[i].viewable) ||
(intent === 'print' && annotations[i].printable)) {
annotationPromises.push(
annotations[i].getOperatorList(partialEvaluator, task, renderForms));
}
}
return Promise.all(annotationPromises).then(function(operatorLists) {
opList.addOp(OPS.beginAnnotations, []);
for (var i = 0, n = operatorLists.length; i < n; ++i) {
opList.addOpList(operatorLists[i]);
}
opList.addOp(OPS.endAnnotations, []);
});
};

return Annotation;
})();

Expand Down
27 changes: 22 additions & 5 deletions src/core/document.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
}(this, function (exports, sharedUtil, corePrimitives, coreStream, coreObj,
coreParser, coreCrypto, coreEvaluator, coreAnnotation) {

var OPS = sharedUtil.OPS;
var MissingDataException = sharedUtil.MissingDataException;
var Util = sharedUtil.Util;
var assert = sharedUtil.assert;
Expand Down Expand Up @@ -63,7 +64,6 @@ var Linearization = coreParser.Linearization;
var calculateMD5 = coreCrypto.calculateMD5;
var OperatorList = coreEvaluator.OperatorList;
var PartialEvaluator = coreEvaluator.PartialEvaluator;
var Annotation = coreAnnotation.Annotation;
var AnnotationFactory = coreAnnotation.AnnotationFactory;

var Page = (function PageClosure() {
Expand Down Expand Up @@ -266,6 +266,8 @@ var Page = (function PageClosure() {
});
});

// Fetch the page's annotations and add their operator lists to the
// page's operator list to render them.
var annotationsPromise = pdfManager.ensure(this, 'annotations');
return Promise.all([pageListPromise, annotationsPromise]).then(
function(datas) {
Expand All @@ -277,10 +279,25 @@ var Page = (function PageClosure() {
return pageOpList;
}

var annotationsReadyPromise = Annotation.appendToOperatorList(
annotations, pageOpList, partialEvaluator, task, intent,
renderInteractiveForms);
return annotationsReadyPromise.then(function () {
// Collect the operator list promises for the annotations. Each promise
// is resolved with the complete operator list for a single annotation.
var i, ii;
var opListPromises = [];
for (i = 0, ii = annotations.length; i < ii; i++) {
if ((intent === 'display' && annotations[i].viewable) ||
(intent === 'print' && annotations[i].printable)) {
opListPromises.push(annotations[i].getOperatorList(
partialEvaluator, task, renderInteractiveForms));
}
}

return Promise.all(opListPromises).then(function(opLists) {
pageOpList.addOp(OPS.beginAnnotations, []);
for (i = 0, ii = opLists.length; i < ii; i++) {
pageOpList.addOpList(opLists[i]);
}
pageOpList.addOp(OPS.endAnnotations, []);
}).then(function() {
pageOpList.flush(true);
return pageOpList;
});
Expand Down

0 comments on commit f663be3

Please sign in to comment.