Improve code structure of the annotation code

This patch improves the code structure of the annotation code.

- Create the annotation border style object in the `setBorderStyle` method instead of in the constructor. The behavior is the same as the `setBorderStyle` method is always called, thus a border style object is still always available.
- Put all data object manipulation lines in one block in the constructor. This improves readability and maintainability as it is more visible which properties are exposed.
- Simplify `appendToOperatorList` by removing the promise capability and removing an unused parameter.
- Remove some unnecessary newlines/spaces.
This commit is contained in:
Tim van der Meij 2015-11-28 16:08:34 +01:00
parent a8279f7d60
commit 8b79becad6
2 changed files with 23 additions and 40 deletions

View File

@ -14,9 +14,8 @@
*/ */
/* globals PDFJS, Util, isDict, isName, stringToPDFString, warn, Dict, Stream, /* globals PDFJS, Util, isDict, isName, stringToPDFString, warn, Dict, Stream,
stringToBytes, Promise, isArray, ObjectLoader, OperatorList, stringToBytes, Promise, isArray, ObjectLoader, OperatorList,
isValidUrl, OPS, createPromiseCapability, AnnotationType, isValidUrl, OPS, AnnotationType, stringToUTF8String,
stringToUTF8String, AnnotationBorderStyleType, ColorSpace, AnnotationBorderStyleType, ColorSpace, AnnotationFlag, isInt */
AnnotationFlag, isInt */
'use strict'; 'use strict';
@ -119,25 +118,22 @@ var Annotation = (function AnnotationClosure() {
function Annotation(params) { function Annotation(params) {
var dict = params.dict; var dict = params.dict;
var data = this.data = {};
data.subtype = dict.get('Subtype').name;
this.setFlags(dict.get('F')); this.setFlags(dict.get('F'));
data.annotationFlags = this.flags;
this.setRectangle(dict.get('Rect')); this.setRectangle(dict.get('Rect'));
data.rect = this.rectangle;
this.setColor(dict.get('C')); this.setColor(dict.get('C'));
data.color = this.color;
this.borderStyle = data.borderStyle = new AnnotationBorderStyle();
this.setBorderStyle(dict); this.setBorderStyle(dict);
this.appearance = getDefaultAppearance(dict); this.appearance = getDefaultAppearance(dict);
data.hasAppearance = !!this.appearance;
data.id = params.ref.num; // Expose public properties using a data object.
this.data = {};
this.data.id = params.ref.num;
this.data.subtype = dict.get('Subtype').name;
this.data.annotationFlags = this.flags;
this.data.rect = this.rectangle;
this.data.color = this.color;
this.data.borderStyle = this.borderStyle;
this.data.hasAppearance = !!this.appearance;
} }
Annotation.prototype = { Annotation.prototype = {
@ -264,6 +260,7 @@ var Annotation = (function AnnotationClosure() {
* @param {Dict} borderStyle - The border style dictionary * @param {Dict} borderStyle - The border style dictionary
*/ */
setBorderStyle: function Annotation_setBorderStyle(borderStyle) { setBorderStyle: function Annotation_setBorderStyle(borderStyle) {
this.borderStyle = new AnnotationBorderStyle();
if (!isDict(borderStyle)) { if (!isDict(borderStyle)) {
return; return;
} }
@ -316,13 +313,11 @@ var Annotation = (function AnnotationClosure() {
}, },
getOperatorList: function Annotation_getOperatorList(evaluator, task) { getOperatorList: function Annotation_getOperatorList(evaluator, task) {
if (!this.appearance) { if (!this.appearance) {
return Promise.resolve(new OperatorList()); return Promise.resolve(new OperatorList());
} }
var data = this.data; var data = this.data;
var appearanceDict = this.appearance.dict; var appearanceDict = this.appearance.dict;
var resourcesPromise = this.loadResources([ var resourcesPromise = this.loadResources([
'ExtGState', 'ExtGState',
@ -354,33 +349,22 @@ var Annotation = (function AnnotationClosure() {
}; };
Annotation.appendToOperatorList = function Annotation_appendToOperatorList( Annotation.appendToOperatorList = function Annotation_appendToOperatorList(
annotations, opList, pdfManager, partialEvaluator, task, intent) { annotations, opList, partialEvaluator, task, intent) {
function reject(e) {
annotationsReadyCapability.reject(e);
}
var annotationsReadyCapability = createPromiseCapability();
var annotationPromises = []; var annotationPromises = [];
for (var i = 0, n = annotations.length; i < n; ++i) { for (var i = 0, n = annotations.length; i < n; ++i) {
if (intent === 'display' && annotations[i].viewable || if ((intent === 'display' && annotations[i].viewable) ||
intent === 'print' && annotations[i].printable) { (intent === 'print' && annotations[i].printable)) {
annotationPromises.push( annotationPromises.push(
annotations[i].getOperatorList(partialEvaluator, task)); annotations[i].getOperatorList(partialEvaluator, task));
} }
} }
Promise.all(annotationPromises).then(function(datas) { return Promise.all(annotationPromises).then(function(operatorLists) {
opList.addOp(OPS.beginAnnotations, []); opList.addOp(OPS.beginAnnotations, []);
for (var i = 0, n = datas.length; i < n; ++i) { for (var i = 0, n = operatorLists.length; i < n; ++i) {
var annotOpList = datas[i]; opList.addOpList(operatorLists[i]);
opList.addOpList(annotOpList);
} }
opList.addOp(OPS.endAnnotations, []); opList.addOp(OPS.endAnnotations, []);
annotationsReadyCapability.resolve(); });
}, reject);
return annotationsReadyCapability.promise;
}; };
return Annotation; return Annotation;
@ -525,7 +509,6 @@ var AnnotationBorderStyle = (function AnnotationBorderStyleClosure() {
})(); })();
var WidgetAnnotation = (function WidgetAnnotationClosure() { var WidgetAnnotation = (function WidgetAnnotationClosure() {
function WidgetAnnotation(params) { function WidgetAnnotation(params) {
Annotation.call(this, params); Annotation.call(this, params);

View File

@ -210,7 +210,7 @@ var Page = (function PageClosure() {
} }
var annotationsReadyPromise = Annotation.appendToOperatorList( var annotationsReadyPromise = Annotation.appendToOperatorList(
annotations, pageOpList, pdfManager, partialEvaluator, task, intent); annotations, pageOpList, partialEvaluator, task, intent);
return annotationsReadyPromise.then(function () { return annotationsReadyPromise.then(function () {
pageOpList.flush(true); pageOpList.flush(true);
return pageOpList; return pageOpList;