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)
This commit is contained in:
commit
7820f58c49
@ -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
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
|
@ -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…
x
Reference in New Issue
Block a user