Merge pull request #6699 from timvandermeij/annotation-refactoring

Improve code structure of the annotation code
This commit is contained in:
Jonas Jenwald 2015-12-01 13:31:18 +01:00
commit 361fa83f3b
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);
@ -649,7 +632,7 @@ var TextAnnotation = (function TextAnnotationClosure() {
} }
} }
Util.inherit(TextAnnotation, Annotation, { }); Util.inherit(TextAnnotation, Annotation, {});
return TextAnnotation; return TextAnnotation;
})(); })();
@ -725,7 +708,7 @@ var LinkAnnotation = (function LinkAnnotationClosure() {
return url; return url;
} }
Util.inherit(LinkAnnotation, Annotation, { }); Util.inherit(LinkAnnotation, Annotation, {});
return LinkAnnotation; return LinkAnnotation;
})(); })();

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;