Browse Source

Merge pull request #7647 from Snuffleupagus/Annotation_appendToOperatorList-pass-in-forms

Ensure that `test/driver.js` actually takes the same `Annotation` code-path as the viewer when running `forms` tests (PR 7633 follow-up)
Tim van der Meij 9 years ago committed by GitHub
parent
commit
7820f58c49
  1. 24
      src/core/annotation.js
  2. 8
      src/core/document.js
  3. 6
      src/display/annotation_layer.js
  4. 15
      test/driver.js

24
src/core/annotation.js

@ -68,12 +68,10 @@ AnnotationFactory.prototype = /** @lends AnnotationFactory.prototype */ {
* @param {Object} ref * @param {Object} ref
* @param {string} uniquePrefix * @param {string} uniquePrefix
* @param {Object} idCounters * @param {Object} idCounters
* @param {boolean} renderInteractiveForms
* @returns {Annotation} * @returns {Annotation}
*/ */
create: function AnnotationFactory_create(xref, ref, create: function AnnotationFactory_create(xref, ref,
uniquePrefix, idCounters, uniquePrefix, idCounters) {
renderInteractiveForms) {
var dict = xref.fetchIfRef(ref); var dict = xref.fetchIfRef(ref);
if (!isDict(dict)) { if (!isDict(dict)) {
return; return;
@ -92,7 +90,6 @@ AnnotationFactory.prototype = /** @lends AnnotationFactory.prototype */ {
ref: isRef(ref) ? ref : null, ref: isRef(ref) ? ref : null,
subtype: subtype, subtype: subtype,
id: id, id: id,
renderInteractiveForms: renderInteractiveForms,
}; };
switch (subtype) { switch (subtype) {
@ -417,7 +414,8 @@ var Annotation = (function AnnotationClosure() {
}.bind(this)); }.bind(this));
}, },
getOperatorList: function Annotation_getOperatorList(evaluator, task) { getOperatorList: function Annotation_getOperatorList(evaluator, task,
renderForms) {
if (!this.appearance) { if (!this.appearance) {
return Promise.resolve(new OperatorList()); return Promise.resolve(new OperatorList());
} }
@ -454,13 +452,13 @@ var Annotation = (function AnnotationClosure() {
}; };
Annotation.appendToOperatorList = function Annotation_appendToOperatorList( Annotation.appendToOperatorList = function Annotation_appendToOperatorList(
annotations, opList, partialEvaluator, task, intent) { annotations, opList, partialEvaluator, task, intent, renderForms) {
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, renderForms));
} }
} }
return Promise.all(annotationPromises).then(function(operatorLists) { return Promise.all(annotationPromises).then(function(operatorLists) {
@ -696,8 +694,6 @@ var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() {
function TextWidgetAnnotation(params) { function TextWidgetAnnotation(params) {
WidgetAnnotation.call(this, params); WidgetAnnotation.call(this, params);
this.renderInteractiveForms = params.renderInteractiveForms;
// Determine the alignment of text in the field. // Determine the alignment of text in the field.
var alignment = Util.getInheritableProperty(params.dict, 'Q'); var alignment = Util.getInheritableProperty(params.dict, 'Q');
if (!isInt(alignment) || alignment < 0 || alignment > 2) { if (!isInt(alignment) || alignment < 0 || alignment > 2) {
@ -718,18 +714,20 @@ var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() {
} }
Util.inherit(TextWidgetAnnotation, WidgetAnnotation, { Util.inherit(TextWidgetAnnotation, WidgetAnnotation, {
getOperatorList: function TextWidgetAnnotation_getOperatorList(evaluator, getOperatorList:
task) { function TextWidgetAnnotation_getOperatorList(evaluator, task,
renderForms) {
var operatorList = new OperatorList(); var operatorList = new OperatorList();
// Do not render form elements on the canvas when interactive forms are // Do not render form elements on the canvas when interactive forms are
// enabled. The display layer is responsible for rendering them instead. // enabled. The display layer is responsible for rendering them instead.
if (this.renderInteractiveForms) { if (renderForms) {
return Promise.resolve(operatorList); return Promise.resolve(operatorList);
} }
if (this.appearance) { if (this.appearance) {
return Annotation.prototype.getOperatorList.call(this, evaluator, task); return Annotation.prototype.getOperatorList.call(this, evaluator, task,
renderForms);
} }
// Even if there is an appearance stream, ignore it. This is the // Even if there is an appearance stream, ignore it. This is the

8
src/core/document.js

@ -246,8 +246,6 @@ var Page = (function PageClosure() {
}); });
}); });
this.renderInteractiveForms = renderInteractiveForms;
var annotationsPromise = pdfManager.ensure(this, 'annotations'); var annotationsPromise = pdfManager.ensure(this, 'annotations');
return Promise.all([pageListPromise, annotationsPromise]).then( return Promise.all([pageListPromise, annotationsPromise]).then(
function(datas) { function(datas) {
@ -260,7 +258,8 @@ var Page = (function PageClosure() {
} }
var annotationsReadyPromise = Annotation.appendToOperatorList( var annotationsReadyPromise = Annotation.appendToOperatorList(
annotations, pageOpList, partialEvaluator, task, intent); annotations, pageOpList, partialEvaluator, task, intent,
renderInteractiveForms);
return annotationsReadyPromise.then(function () { return annotationsReadyPromise.then(function () {
pageOpList.flush(true); pageOpList.flush(true);
return pageOpList; return pageOpList;
@ -331,8 +330,7 @@ var Page = (function PageClosure() {
var annotationRef = annotationRefs[i]; var annotationRef = annotationRefs[i];
var annotation = annotationFactory.create(this.xref, annotationRef, var annotation = annotationFactory.create(this.xref, annotationRef,
this.uniquePrefix, this.uniquePrefix,
this.idCounters, this.idCounters);
this.renderInteractiveForms);
if (annotation) { if (annotation) {
annotations.push(annotation); annotations.push(annotation);
} }

6
src/display/annotation_layer.js

@ -448,14 +448,18 @@ var TextWidgetAnnotationElement = (
var element = null; var element = null;
if (this.renderInteractiveForms) { if (this.renderInteractiveForms) {
// NOTE: We cannot set the values using `element.value` below, since it
// prevents the AnnotationLayer rasterizer in `test/driver.js`
// from parsing the elements correctly for the reference tests.
if (this.data.multiLine) { if (this.data.multiLine) {
element = document.createElement('textarea'); element = document.createElement('textarea');
element.textContent = this.data.fieldValue;
} else { } else {
element = document.createElement('input'); element = document.createElement('input');
element.type = 'text'; element.type = 'text';
element.setAttribute('value', this.data.fieldValue);
} }
element.value = this.data.fieldValue;
element.disabled = this.data.readOnly; element.disabled = this.data.readOnly;
if (this.data.maxLen !== null) { if (this.data.maxLen !== null) {

15
test/driver.js

@ -459,6 +459,9 @@ var Driver = (function DriverClosure() {
self.canvas.height = viewport.height; self.canvas.height = viewport.height;
self._clearCanvas(); self._clearCanvas();
// Initialize various `eq` test subtypes, see comment below.
var renderAnnotations = false, renderForms = false;
var textLayerCanvas, annotationLayerCanvas; var textLayerCanvas, annotationLayerCanvas;
var initPromise; var initPromise;
if (task.type === 'text') { if (task.type === 'text') {
@ -483,9 +486,13 @@ var Driver = (function DriverClosure() {
}); });
} else { } else {
textLayerCanvas = null; textLayerCanvas = null;
// We fetch the `eq` specific test subtypes here, to avoid
// accidentally changing the behaviour for other types of tests.
renderAnnotations = !!task.annotations;
renderForms = !!task.forms;
// Render the annotation layer if necessary. // Render the annotation layer if necessary.
if (task.annotations || task.forms) { if (renderAnnotations || renderForms) {
// Create a dummy canvas for the drawing operations. // Create a dummy canvas for the drawing operations.
annotationLayerCanvas = self.annotationLayerCanvas; annotationLayerCanvas = self.annotationLayerCanvas;
if (!annotationLayerCanvas) { if (!annotationLayerCanvas) {
@ -503,10 +510,9 @@ var Driver = (function DriverClosure() {
initPromise = initPromise =
page.getAnnotations({ intent: 'display' }).then( page.getAnnotations({ intent: 'display' }).then(
function(annotations) { function(annotations) {
var forms = task.forms || false;
return rasterizeAnnotationLayer(annotationLayerContext, return rasterizeAnnotationLayer(annotationLayerContext,
viewport, annotations, viewport, annotations,
page, forms); page, renderForms);
}); });
} else { } else {
annotationLayerCanvas = null; annotationLayerCanvas = null;
@ -516,7 +522,8 @@ var Driver = (function DriverClosure() {
var renderContext = { var renderContext = {
canvasContext: ctx, canvasContext: ctx,
viewport: viewport viewport: viewport,
renderInteractiveForms: renderForms,
}; };
var completeRender = (function(error) { var completeRender = (function(error) {
// if text layer is present, compose it on top of the page // if text layer is present, compose it on top of the page

Loading…
Cancel
Save