UNPKG

@syncfusion/ej2-pdfviewer

Version:
997 lines 131 kB
var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); import { randomId, Point } from '@syncfusion/ej2-drawings'; import { rotatePoint } from '@syncfusion/ej2-drawings'; import { Rect } from '@syncfusion/ej2-drawings'; import { transformPointByMatrix, rotateMatrix, identityMatrix } from '@syncfusion/ej2-drawings'; import { TextElement } from '@syncfusion/ej2-drawings'; import { Selector } from './selector'; import { findActiveElement } from './action'; import { cloneObject, isLineShapes, updateColorWithOpacity } from './drawing-util'; import { isNullOrUndefined } from '@syncfusion/ej2-base'; import { updatePerimeterLabel } from './connector-util'; import { Browser } from '@syncfusion/ej2-base'; /** * Defines the interactive tools * * @hidden */ var ToolBase = /** @class */ (function () { /** * Initializes the tool * * @param {PdfViewer} pdfViewer - Specified the pdfviewer component. * @param {PdfViewerBase} pdfViewerBase - Specified the pdfViewer base component. * @param {boolean} protectChange - Set the default value as false. */ function ToolBase(pdfViewer, pdfViewerBase, protectChange) { if (protectChange === void 0) { protectChange = false; } /** * Command that is corresponding to the current action */ this.commandHandler = null; /** * Sets/Gets whether the interaction is being done */ this.inAction = false; /** * Sets/Gets the protect change */ this.pdfViewerBase = null; /** * Sets/Gets the current element that is under mouse */ /** @private */ this.currentElement = null; /** @private */ this.blocked = false; this.isTooltipVisible = false; /** @private */ this.childTable = {}; /** @private */ this.helper = undefined; /** * Sets/Gets the previous object when mouse down */ this.undoElement = { annotations: [] }; this.undoParentElement = { annotations: [] }; this.commandHandler = pdfViewer; this.pdfViewerBase = pdfViewerBase; } /** * @param {IElement} currentElement - Specified the current element. * @returns {void} */ ToolBase.prototype.startAction = function (currentElement) { this.currentElement = currentElement; this.inAction = true; }; /** * @private * @param {MouseEventArgs} args - Mouse up event arguments. * @returns {void} */ ToolBase.prototype.mouseDown = function (args) { this.currentElement = args.source; this.startPosition = this.currentPosition = this.prevPosition = args.position; this.isTooltipVisible = true; this.baseDirection = null; this.startAction(args.source); }; /** * @private * @param {MouseEventArgs} args - Mouse up event arguments. * @returns {boolean} - Returns true or false. */ ToolBase.prototype.mouseMove = function (args) { this.currentPosition = args.position; //this.currentElement = currentElement; this.prevPageId = this.pdfViewerBase.activeElements.activePageID; return !this.blocked; }; /** * @private * @param {number} deltaX - The difference in X-axis points. * @param {number} deltaY - The difference in Y-axis points. * @param {PointModel} start - The starting point of the line. * @param {PointModel} previous - The previous mouse position. * @param {number} restrictAngle - The angle increment to snap to. * @returns {PointModel} - The snapped position. */ ToolBase.prototype.getSnappedPosition = function (deltaX, deltaY, start, previous, restrictAngle) { // Step 1: Determine initial movement direction if (!this.baseDirection) { var initDX = previous.x - start.x; var initDY = previous.y - start.y; if (Math.abs(initDX) > Math.abs(initDY)) { this.baseDirection = initDX > 0 ? 'right' : 'left'; } else { this.baseDirection = initDY > 0 ? 'down' : 'up'; } } // Step 2: Calculate angle from start to current var angle = Math.atan2(deltaY, deltaX) * (180 / Math.PI); if (angle < 0) { angle += 360; } // Step 3: Adjust angle so baseDirection becomes 0° var adjustedAngle = angle; switch (this.baseDirection) { case 'right': adjustedAngle = angle; break; case 'left': adjustedAngle = (angle + 180) % 360; break; case 'up': adjustedAngle = (angle + 90) % 360; break; case 'down': adjustedAngle = (angle + 270) % 360; break; } // Step 4: Snap adjusted angle var maxSnaps = Math.floor(360 / restrictAngle); var snappedRelativeAngle = Math.round(adjustedAngle / restrictAngle) * restrictAngle; snappedRelativeAngle = Math.min(snappedRelativeAngle, maxSnaps * restrictAngle); // Step 5: Convert back to absolute angle var snappedAngle = snappedRelativeAngle; switch (this.baseDirection) { case 'right': snappedAngle = snappedRelativeAngle; break; case 'left': snappedAngle = (snappedRelativeAngle + 180) % 360; break; case 'up': snappedAngle = (snappedRelativeAngle + 270) % 360; break; case 'down': snappedAngle = (snappedRelativeAngle + 90) % 360; break; } snappedAngle = ((snappedAngle % 360) + 360) % 360; var snappedAngleRad = snappedAngle * (Math.PI / 180); var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); var snappedX = start.x + distance * Math.cos(snappedAngleRad); var snappedY = start.y + distance * Math.sin(snappedAngleRad); var snappedPosition = { x: snappedX, y: snappedY }; return snappedPosition; }; /** * @private * @param {MouseEventArgs} args - Mouse up event arguments. * @returns {void} */ ToolBase.prototype.mouseUp = function (args) { this.currentPosition = args.position; // this.currentElement = currentElement; this.isTooltipVisible = false; //At the end this.endAction(); this.helper = null; }; ToolBase.prototype.endAction = function () { //remove helper if (this.commandHandler) { this.commandHandler.tool = ''; if (this.helper) { this.commandHandler.remove(this.helper); } } this.commandHandler = null; this.currentElement = null; this.currentPosition = null; this.inAction = false; this.blocked = false; }; /** * @private * @param {MouseEventArgs} args - Mouse wheel event arguments. * @returns {void} */ ToolBase.prototype.mouseWheel = function (args) { this.currentPosition = args.position; }; /** * @private * @param {MouseEventArgs} args - Mouse leave event arguments. * @returns {void} */ ToolBase.prototype.mouseLeave = function (args) { this.mouseUp(args); }; ToolBase.prototype.updateSize = function (shape, startPoint, endPoint, corner, initialBounds, angle, isMouseUp) { var zoom = this.commandHandler.viewerBase.getZoomFactor(); var difx = this.currentPosition.x / zoom - this.startPosition.x / zoom; var dify = this.currentPosition.y / zoom - this.startPosition.y / zoom; var rotateAngle = (shape instanceof TextElement) ? angle : shape.rotateAngle; var matrix = identityMatrix(); rotateMatrix(matrix, -rotateAngle, 0, 0); var deltaWidth = 0; var deltaHeight = 0; var diff; var width = (shape instanceof TextElement) ? shape.actualSize.width : shape.wrapper.bounds.width; var height = (shape instanceof TextElement) ? shape.actualSize.height : shape.wrapper.bounds.height; var obj = shape; if (!shape.formFieldAnnotationType) { if (!shape.annotName && !shape.shapeAnnotationType) { if (shape) { obj = shape.annotations[0]; } } } var annotationSettings = this.commandHandler.annotationModule ? this.commandHandler.annotationModule.findAnnotationSettings(obj) : {}; var annotationMaxHeight = 0; var annotationMaxWidth = 0; var annotationMinHeight = 0; var annotationMinWidth = 0; if (annotationSettings.minWidth || annotationSettings.maxWidth || annotationSettings.minHeight || annotationSettings.maxHeight) { annotationMaxHeight = annotationSettings.maxHeight ? annotationSettings.maxHeight : 2000; annotationMaxWidth = annotationSettings.maxWidth ? annotationSettings.maxWidth : 2000; annotationMinHeight = annotationSettings.minHeight ? annotationSettings.minHeight : 0; annotationMinWidth = annotationSettings.minWidth ? annotationSettings.minWidth : 0; } var isAnnotationSet = false; if (annotationMinHeight || annotationMinWidth || annotationMaxHeight || annotationMaxWidth) { isAnnotationSet = true; } if (isAnnotationSet && isMouseUp) { var size = this.getPositions(corner, difx, dify); var newWidth = width + size.x; var newHeight = height + size.y; if (newHeight < annotationMinHeight) { dify = annotationMinHeight - height; } else if (newHeight > annotationMaxHeight) { dify = annotationMaxHeight - height; } if (newWidth < annotationMinWidth) { difx = annotationMinWidth - width; } else if (newWidth > annotationMaxWidth) { difx = annotationMaxWidth - width; } } switch (corner) { case 'ResizeWest': diff = transformPointByMatrix(matrix, ({ x: difx, y: dify })); difx = diff.x; dify = diff.y; deltaHeight = 1; dify = 0; if (isAnnotationSet) { if (initialBounds.width - difx > annotationMaxWidth) { difx = annotationMaxWidth - initialBounds.width; } } deltaWidth = (initialBounds.width - difx) / width; break; case 'ResizeEast': diff = transformPointByMatrix(matrix, ({ x: difx, y: dify })); difx = diff.x; dify = diff.y; dify = 0; if (isAnnotationSet) { if (initialBounds.width + difx > annotationMaxWidth) { difx = annotationMaxWidth - initialBounds.width; } } deltaWidth = (initialBounds.width + difx) / width; deltaHeight = 1; break; case 'ResizeNorth': deltaWidth = 1; diff = transformPointByMatrix(matrix, ({ x: difx, y: dify })); difx = diff.x; dify = diff.y; if (isAnnotationSet) { if (initialBounds.height - dify > annotationMaxHeight) { dify = annotationMaxHeight - initialBounds.height; } } deltaHeight = (initialBounds.height - dify) / height; break; case 'ResizeSouth': deltaWidth = 1; diff = transformPointByMatrix(matrix, ({ x: difx, y: dify })); difx = diff.x; dify = diff.y; if (isAnnotationSet) { if (initialBounds.height + dify > annotationMaxHeight) { dify = annotationMaxHeight - initialBounds.height; } } deltaHeight = (initialBounds.height + dify) / height; break; case 'ResizeNorthEast': diff = transformPointByMatrix(matrix, ({ x: difx, y: dify })); difx = diff.x; dify = diff.y; if (isAnnotationSet) { if (initialBounds.width + difx > annotationMaxWidth) { difx = annotationMaxWidth - initialBounds.width; } if (initialBounds.height - dify > annotationMaxHeight) { dify = annotationMaxHeight - initialBounds.height; } } deltaWidth = (initialBounds.width + difx) / width; deltaHeight = (initialBounds.height - dify) / height; break; case 'ResizeNorthWest': diff = transformPointByMatrix(matrix, ({ x: difx, y: dify })); difx = diff.x; dify = diff.y; if (isAnnotationSet) { if (initialBounds.width - difx > annotationMaxWidth) { difx = annotationMaxWidth - initialBounds.width; } if (initialBounds.height - dify > annotationMaxHeight) { dify = annotationMaxHeight - initialBounds.height; } } deltaWidth = (initialBounds.width - difx) / width; deltaHeight = (initialBounds.height - dify) / height; break; case 'ResizeSouthEast': diff = transformPointByMatrix(matrix, ({ x: difx, y: dify })); difx = diff.x; dify = diff.y; if (isAnnotationSet) { if (initialBounds.width + difx > annotationMaxWidth) { difx = annotationMaxWidth - initialBounds.width; } if (initialBounds.height + dify > annotationMaxHeight) { dify = annotationMaxHeight - initialBounds.height; } } deltaHeight = (initialBounds.height + dify) / height; deltaWidth = (initialBounds.width + difx) / width; break; case 'ResizeSouthWest': diff = transformPointByMatrix(matrix, ({ x: difx, y: dify })); difx = diff.x; dify = diff.y; if (isAnnotationSet) { if (initialBounds.width - difx > annotationMaxWidth) { difx = annotationMaxWidth - initialBounds.width; } if (initialBounds.height + dify > annotationMaxHeight) { dify = annotationMaxHeight - initialBounds.height; } } deltaWidth = (initialBounds.width - difx) / width; deltaHeight = (initialBounds.height + dify) / height; break; } return { width: deltaWidth, height: deltaHeight }; }; ToolBase.prototype.getPivot = function (corner) { switch (corner) { case 'ResizeWest': return { x: 1, y: 0.5 }; case 'ResizeEast': return { x: 0, y: 0.5 }; case 'ResizeNorth': return { x: 0.5, y: 1 }; case 'ResizeSouth': return { x: 0.5, y: 0 }; case 'ResizeNorthEast': return { x: 0, y: 1 }; case 'ResizeNorthWest': return { x: 1, y: 1 }; case 'ResizeSouthEast': return { x: 0, y: 0 }; case 'ResizeSouthWest': return { x: 1, y: 0 }; } return { x: 0.5, y: 0.5 }; }; ToolBase.prototype.getPositions = function (corner, x, y) { switch (corner) { case 'ResizeEast': return { x: x, y: 0 }; case 'ResizeSouthEast': return { x: x, y: y }; case 'ResizeSouth': return { x: 0, y: y }; case 'ResizeNorth': return { x: 0, y: -y }; case 'ResizeNorthEast': return { x: x, y: -y }; case 'ResizeNorthWest': return { x: -x, y: -y }; case 'ResizeWest': return { x: -x, y: 0 }; case 'ResizeSouthWest': return { x: -x, y: y }; } return { x: x, y: y }; }; return ToolBase; }()); export { ToolBase }; /** * Helps to select the objects * * @hidden */ var SelectTool = /** @class */ (function (_super) { __extends(SelectTool, _super); function SelectTool(commandHandler, base) { return _super.call(this, commandHandler, base, true) || this; // this.action = action; } /** * @private * @param {MouseEventArgs} args - Mouse down event arguments. * @returns {void} */ SelectTool.prototype.mouseDown = function (args) { this.inAction = true; this.mouseEventHelper(args); _super.prototype.mouseDown.call(this, args); }; SelectTool.prototype.mouseEventHelper = function (args) { if (this.commandHandler && this.commandHandler.annotationModule) { this.commandHandler.annotationModule.overlappedCollections = findActiveElement(args, this.pdfViewerBase, this.commandHandler, true); } var object = findActiveElement(args, this.pdfViewerBase, this.commandHandler); // if (!isNullOrUndefined(object) && (object as any).shapeAnnotationType !== 'Path'){ var isLock = false; if (object && object.shapeAnnotationType === 'StickyNotes') { if (object.annotationSettings && object.annotationSettings.isLock) { if (this.commandHandler.annotationModule.checkAllowedInteractions('Select', object)) { isLock = false; } else { isLock = true; } } } if (!isLock) { var currentSelctor = void 0; if (args.source && args.annotationSelectorSettings !== null) { currentSelctor = args.source.annotationSelectorSettings; } else { currentSelctor = ''; } if (this.commandHandler) { var selectedObject = this.commandHandler.selectedItems; if (selectedObject) { var annotation = selectedObject.annotations[0]; var formField = selectedObject.formFields[0]; var currentAnnot = this.commandHandler.selectedItems.annotations[0]; var currentSource = args.source; if ((selectedObject.annotations.length) && args.info && !args.info.ctrlKey && this.commandHandler.annotationModule && this.commandHandler.annotationModule.freeTextAnnotationModule.isInuptBoxInFocus === false) { this.commandHandler.clearSelection(this.pdfViewerBase.activeElements.activePageID); } else if (args.info && args.info.ctrlKey && ((currentSource && currentSource.shapeAnnotationType === 'FreeText') || (currentAnnot && currentAnnot.shapeAnnotationType === 'FreeText'))) { this.commandHandler.clearSelection(this.pdfViewerBase.activeElements.activePageID); } else if (isNullOrUndefined(object) && (this.commandHandler.annotationModule && !isNullOrUndefined(this.commandHandler.annotation.textMarkupAnnotationModule) && isNullOrUndefined(this.commandHandler.annotation.textMarkupAnnotationModule.currentTextMarkupAnnotation)) && this.commandHandler.formDesignerModule && !((currentSource && currentSource.shapeAnnotationType === 'FreeText') || (currentAnnot && (currentAnnot.shapeAnnotationType === 'FreeText' || currentAnnot.shapeAnnotationType === 'Image' || currentAnnot.shapeAnnotationType === 'StickyNotes')))) { this.commandHandler.clearSelection(this.pdfViewerBase.activeElements.activePageID); } if (object) { if ((isNullOrUndefined(formField) || (formField && formField.id !== object.id)) && !isNullOrUndefined(this.pdfViewerBase.isFreeTextSelected) && !this.pdfViewerBase.isFreeTextSelected) { this.commandHandler.select([object.id], currentSelctor); this.commandHandler.viewerBase.isAnnotationMouseDown = true; } this.pdfViewerBase.isFreeTextSelected = false; this.commandHandler.viewerBase.isFormFieldMouseDown = true; } if (selectedObject.annotations.length === 0 && annotation && annotation.shapeAnnotationType !== 'HandWrittenSignature' && annotation.shapeAnnotationType !== 'SignatureText' && annotation.shapeAnnotationType !== 'SignatureImage' && annotation.shapeAnnotationType !== 'Path' && !annotation.formFieldAnnotationType) { if (this.commandHandler.enableToolbar && Browser.isDevice && !this.commandHandler.enableDesktopMode) { this.commandHandler.toolbarModule.showToolbar(true); } this.commandHandler.fireAnnotationUnSelect(annotation.annotName, annotation.pageIndex, annotation); if (annotation && annotation.shapeAnnotationType === 'Redaction' && this.commandHandler.toolbar && this.commandHandler.toolbar.redactionToolbarModule) { this.commandHandler.toolbar.redactionToolbarModule.showHideDeleteIcon(false); } } if (selectedObject.annotations.length === 0 && annotation && (annotation.shapeAnnotationType === 'HandWrittenSignature' || annotation.shapeAnnotationType === 'SignatureText' || annotation.shapeAnnotationType === 'SignatureImage' || annotation.shapeAnnotationType === 'Path' || annotation.signatureType)) { this.commandHandler.fireSignatureUnselect(annotation.signatureName, annotation.pageIndex, annotation); } if (selectedObject.formFields.length === 0 && this.commandHandler.formDesignerModule && formField && formField.formFieldAnnotationType) { var field = { name: formField.name, id: formField.id, value: formField.value, fontFamily: formField.fontFamily, fontSize: formField.fontSize, fontStyle: formField.fontStyle, color: formField.color, backgroundColor: formField.backgroundColor, alignment: formField.alignment, isReadonly: formField.isReadOnly, visibility: formField.visibility, maxLength: formField.maxLength, isRequired: formField.isRequired, isPrint: formField.isPrint, rotation: formField.rotation, tooltip: formField.tooltip, options: formField.options, isChecked: formField.isChecked, isSelected: formField.isSelected, customData: formField.customData, lineBound: formField.bounds, pageNumber: formField.pageIndex, insertSpaces: formField.insertSpaces, formFieldAnnotationType: formField.formFieldAnnotationType, borderColor: formField.borderColor, thickness: formField.thickness, isTransparent: formField.isTransparent }; this.commandHandler.fireFormFieldUnselectEvent('formFieldUnselect', field, formField.pageIndex); } else if (this.pdfViewerBase.currentTarget && this.pdfViewerBase.currentTarget.id && this.commandHandler.formFields && event.type === 'mousedown') { for (var i = 0; i < this.commandHandler.formFields.length; i++) { var formField_1 = this.commandHandler.formFields[parseInt(i.toString(), 10)]; if (this.pdfViewerBase.currentTarget && this.pdfViewerBase.currentTarget.id === formField_1.id) { var field = { value: formField_1.value, fontFamily: formField_1.fontFamily, fontSize: formField_1.fontSize, fontStyle: formField_1.fontStyle, color: formField_1.color, backgroundColor: formField_1.backgroundColor, alignment: formField_1.alignment, isReadonly: formField_1.isReadonly, visibility: formField_1.visibility, maxLength: formField_1.maxLength, isRequired: formField_1.isRequired, isPrint: formField_1.isPrint, rotation: formField_1.rotateAngle, tooltip: formField_1.tooltip, options: formField_1.options, isChecked: formField_1.isChecked, isSelected: formField_1.isSelected, id: formField_1.id, name: formField_1.name }; if (!object) { this.commandHandler.fireFocusOutFormField(field, formField_1.pageIndex); this.pdfViewerBase.currentTarget = null; } else { if (this.pdfViewerBase.currentTarget.id !== event.target.id && event.target.className !== 'e-pv-text-layer') { this.commandHandler.fireFocusOutFormField(field, formField_1.pageIndex); this.pdfViewerBase.currentTarget = null; } } } } } } } } // } else { // if (!isNullOrUndefined(this.commandHandler)) // this.commandHandler.clearSelection(this.pdfViewerBase.activeElements.activePageID); // } }; /** * @private * @param {MouseEventArgs} args - Mouse move event arguments. * @returns {boolean} - Returns true or false. */ SelectTool.prototype.mouseMove = function (args) { _super.prototype.mouseMove.call(this, args); //draw selected region return !this.blocked; }; /** * @private * @param {MouseEventArgs} args - Mouse up event arguments. * @returns {void} */ SelectTool.prototype.mouseUp = function (args) { this.mouseEventHelper(args); this.inAction = false; _super.prototype.mouseUp.call(this, args); }; /** * @private * @param {MouseEventArgs} args - Mouse leave event arguments. * @returns {void} */ SelectTool.prototype.mouseLeave = function (args) { if (this.inAction) { this.mouseUp(args); } }; return SelectTool; }(ToolBase)); export { SelectTool }; /** @hidden */ var MoveTool = /** @class */ (function (_super) { __extends(MoveTool, _super); function MoveTool(commandHandler, base) { var _this = _super.call(this, commandHandler, base) || this; /** @private */ _this.currentTarget = null; /** @private */ _this.prevNode = null; return _this; } /** * @private * @param {MouseEventArgs} args - Mouse down event arguments. * @returns {void} */ MoveTool.prototype.mouseDown = function (args) { _super.prototype.mouseDown.call(this, args); this.offset = { x: args.source.wrapper.offsetX, y: args.source.wrapper.offsetY }; this.startPosition = args.position; var nodeMouseDown = cloneObject(args.source); this.redoElement = { bounds: { x: nodeMouseDown.wrapper.offsetX, y: nodeMouseDown.wrapper.offsetY, width: nodeMouseDown.wrapper.actualSize.width, height: nodeMouseDown.wrapper.actualSize.height } }; if (isLineShapes(nodeMouseDown)) { this.redoElement.vertexPoints = nodeMouseDown.vertexPoints; this.redoElement.leaderHeight = nodeMouseDown.leaderHeight; } this.inAction = true; }; /** * @private * @param {any} args - Specified the mouse event arguments. * @returns {void} */ MoveTool.prototype.mouseUp = function (args) { if (this.commandHandler && args.source) { this.checkisAnnotationMove(args); var isDragged = false; var currentSelctor = args.source.annotationSelectorSettings; this.commandHandler.clearSelection(this.pdfViewerBase.activeElements.activePageID); this.commandHandler.select([args.source.id], currentSelctor); if (this.pdfViewerBase.activeElements.activePageID === args.source.pageIndex && this.pdfViewerBase.action === 'Drag') { this.commandHandler.dragSelectedObjects(this.calculateMouseActionXDiff(args), this.calculateMouseActionYDiff(args), this.pdfViewerBase.activeElements.activePageID, currentSelctor, null); } if (args.source && (args.source.formFieldAnnotationType === 'Textbox' || args.source.formFieldAnnotationType === 'Checkbox' || args.source.formFieldAnnotationType === 'RadioButton' || args.source.formFieldAnnotationType === 'ListBox' || args.source.formFieldAnnotationType === 'SignatureField' || args.source.formFieldAnnotationType === 'InitialField' || args.source.formFieldAnnotationType === 'DropdownList' || args.source.formFieldAnnotationType === 'PasswordField')) { this.commandHandler.formDesignerModule.updateHTMLElement(args.source); } this.commandHandler.renderSelector(this.pdfViewerBase.activeElements.activePageID, currentSelctor); this.commandHandler.viewerBase.isAnnotationMouseMove = false; this.commandHandler.viewerBase.isFormFieldMouseMove = false; var newShapeObject = { bounds: { x: args.source.wrapper.offsetX, y: args.source.wrapper.offsetY, width: args.source.wrapper.actualSize.width, height: args.source.wrapper.actualSize.height }, modifiedDate: args.source.modifiedDate }; if (isLineShapes(args.source)) { newShapeObject.vertexPoints = args.source.vertexPoints; newShapeObject.leaderHeight = args.source.leaderHeight; } if (args.target && args.target.formFieldAnnotationType) { var node = args.target; var field = { value: node.value, fontFamily: node.fontFamily, fontSize: node.fontSize, fontStyle: node.fontStyle, color: node.color, backgroundColor: node.backgroundColor, borderColor: node.borderColor, thickness: node.thickness, alignment: node.alignment, isReadonly: node.isReadonly, visibility: node.visibility, maxLength: node.maxLength, isRequired: node.isRequired, isPrint: node.isPrint, rotation: node.rotateAngle, tooltip: node.tooltip, options: node.options, isChecked: node.isChecked, isSelected: node.isSelected, id: args.source ? args.source.id : '', name: node.name, customData: node.customData, lineBound: node.bounds, pageNumber: node.pageIndex, insertSpaces: node.insertSpaces, formFieldAnnotationType: node.formFieldAnnotationType, isTransparent: node.isTransparent }; var actualWidth = args.source.wrapper.actualSize.width; var actualHeight = args.source.wrapper.actualSize.height; var currentPosition = { X: args.source.wrapper.offsetX - actualWidth / 2, Y: args.source.wrapper.offsetY - actualHeight / 2, Width: actualWidth, Height: actualHeight }; var previousPosition = { X: this.offset.x - actualWidth / 2, Y: this.offset.y - actualHeight / 2, Width: args.source.wrapper.actualSize.width, Height: args.source.wrapper.actualSize.height }; this.commandHandler.fireFormFieldMoveEvent('formFieldMove', field, node.pageIndex, previousPosition, currentPosition); } if (!isNullOrUndefined(this.redoElement) && (this.redoElement.bounds.height !== newShapeObject.bounds.height || this.redoElement.bounds.width !== newShapeObject.bounds.width || this.redoElement.bounds.x !== newShapeObject.bounds.x || this.redoElement.bounds.y !== newShapeObject.bounds.y)) { isDragged = true; } if (this.commandHandler.annotation && isDragged) { this.commandHandler.annotation.addAction(this.pageIndex, null, args.source, 'Drag', '', this.redoElement, newShapeObject); this.commandHandler.annotation.stampAnnotationModule.updateSessionStorage(args.source, null, 'Drag'); this.commandHandler.annotation.stickyNotesAnnotationModule.updateStickyNotes(args.source, null); } } var shapeAnnotationType = this.commandHandler && this.commandHandler.selectedItems && this.commandHandler.selectedItems.annotations && this.commandHandler.selectedItems.annotations.length > 0 ? this.commandHandler.selectedItems.annotations[0].shapeAnnotationType : null; if (shapeAnnotationType && shapeAnnotationType !== 'Image' && shapeAnnotationType !== 'SignatureImage') { _super.prototype.mouseUp.call(this, args); } else if (shapeAnnotationType === 'Image' || shapeAnnotationType === 'SignatureImage') { this.inAction = false; } else if (this.commandHandler && this.commandHandler.selectedItems && this.commandHandler.selectedItems.formFields && this.commandHandler.selectedItems.formFields.length > 0) { _super.prototype.mouseUp.call(this, args); } }; MoveTool.prototype.calculateMouseXDiff = function () { if (this.currentPosition && this.startPosition) { return this.currentPosition.x - this.startPosition.x; } else { return 0; } }; MoveTool.prototype.calculateMouseYDiff = function () { if (this.currentPosition && this.startPosition) { return this.currentPosition.y - this.startPosition.y; } else { return 0; } }; MoveTool.prototype.calculateMouseActionXDiff = function (args) { var x = this.calculateMouseXDiff() / this.commandHandler.viewerBase.getZoomFactor(); // let y: number = this.calculateMouseYDiff() / this.commandHandler.magnification.zoomFactor; if (this.offset) { var requiredX = this.offset.x + x; // let requiredY: number = this.offset.y + y; return requiredX - args.source.wrapper.offsetX; //let diffY: number = requiredY - args.source.wrapper.offsetY; } else { return 0; } }; MoveTool.prototype.calculateMouseActionYDiff = function (args) { // let x: number = this.calculateMouseXDiff() / this.commandHandler.magnification.zoomFactor; var y = this.calculateMouseYDiff() / this.commandHandler.viewerBase.getZoomFactor(); if (this.offset) { // let requiredX: number = this.offset.x + x; var requiredY = this.offset.y + y; // let diffX: number = requiredX - args.source.wrapper.offsetX; return requiredY - args.source.wrapper.offsetY; } else { return 0; } }; /** * @private * @param {MouseEventArgs} args - Specified the mouse event arguments. * @param {boolean} isStamp - Specified the stamp annotation or not. * @param {boolean} isSkip - Specified the annotation skip or not. * @returns {boolean} - Returns the true or false. */ MoveTool.prototype.mouseMove = function (args, isStamp, isSkip) { _super.prototype.mouseMove.call(this, args); if (this.inAction) { this.currentPosition = args.position; this.currentTarget = args.target; var currentSelctor = args.source.annotationSelectorSettings; var x = this.calculateMouseXDiff() / this.commandHandler.viewerBase.getZoomFactor(); var y = this.calculateMouseYDiff() / this.commandHandler.viewerBase.getZoomFactor(); var requiredX = this.offset.x + x; var requiredY = this.offset.y + y; var diffX = this.calculateMouseActionXDiff(args); var diffY = this.calculateMouseActionYDiff(args); var selectedItem = this.commandHandler.selectedItems.annotations[0]; var cobject = void 0; if (!this.helper) { cobject = this.commandHandler.selectedItems.annotations.length > 0 ? cloneObject(this.commandHandler.selectedItems.annotations[0]) : cloneObject(this.commandHandler.selectedItems.formFields[0]); if (cobject.wrapper) { diffX = requiredX - cobject.wrapper.offsetX; diffY = requiredY - cobject.wrapper.offsetY; cobject.bounds = this.commandHandler.selectedItems.annotations.length > 0 ? this.commandHandler.selectedItems.annotations[0].wrapper.bounds : this.commandHandler.selectedItems.formFields[0].wrapper.bounds; } cobject.wrapper = undefined; cobject.id = 'diagram_helper'; if (cobject.shapeAnnotationType === 'Stamp') { cobject.strokeColor = ''; cobject.borderDashArray = ''; cobject.fillColor = 'transparent'; cobject.stampFillColor = 'transparent'; cobject.data = ''; } else if (cobject.shapeAnnotationType === 'FreeText') { cobject.strokeColor = 'blue'; cobject.fillColor = 'transparent'; cobject.thickness = 1; cobject.opacity = 1; cobject.dynamicText = ''; } else if (cobject.shapeAnnotationType === 'SignatureText') { cobject.strokeColor = 'red'; cobject.borderDashArray = '5,5'; cobject.fillColor = 'transparent'; cobject.thickness = 2; cobject.opacity = 1; cobject.data = ''; } else if (cobject.shapeAnnotationType === 'Redaction') { cobject.strokeColor = cobject.markerBorderColor; var fillColor = updateColorWithOpacity(cobject.fillColor, cobject.markerOpacity); cobject.borderDashArray = '0,0'; cobject.fillColor = fillColor; cobject.thickness = 2; cobject.opacity = 1; cobject.data = ''; } else { cobject.strokeColor = 'red'; cobject.borderDashArray = '5,5'; cobject.fillColor = 'transparent'; cobject.thickness = 2; cobject.opacity = 1; } if (cobject.enableShapeLabel === true) { cobject.labelContent = ''; } var shapeAnnotationType = cobject.shapeAnnotationType; if (!isStamp && shapeAnnotationType !== 'Image' && shapeAnnotationType !== 'SignatureImage') { this.helper = cobject = this.commandHandler.add(cobject); } else { cobject = this.helper = args.source; } if (this.commandHandler.selectedItems.annotations.length > 0) { this.commandHandler.selectedItems.annotations = [cobject]; } else { this.commandHandler.selectedItems.formFields = [cobject]; } } else { diffX = requiredX - this.helper.wrapper.offsetX; diffY = requiredY - this.helper.wrapper.offsetY; } if (this.helper && this.helper.shapeAnnotationType === 'Stamp') { isStamp = true; } if (this.commandHandler.checkBoundaryConstraints(diffX, diffY, this.pdfViewerBase.activeElements.activePageID, this.helper.wrapper.bounds, isStamp, isSkip)) { var shapeAnnotationType = this.helper.shapeAnnotationType; if (this.helper && (shapeAnnotationType === 'Image' || shapeAnnotationType === 'SignatureImage')) { this.checkisAnnotationMove(args); var currentSelctor_1 = args.source.annotationSelectorSettings; this.commandHandler.clearSelection(this.pdfViewerBase.activeElements.activePageID); this.commandHandler.select([args.source.id], currentSelctor_1); this.commandHandler.dragSelectedObjects(diffX, diffY, this.pdfViewerBase.activeElements.activePageID, currentSelctor_1, this.helper); this.commandHandler.renderSelector(this.pdfViewerBase.activeElements.activePageID, currentSelctor_1); } else { this.commandHandler.dragSelectedObjects(diffX, diffY, this.pdfViewerBase.activeElements.activePageID, currentSelctor, this.helper); } this.prevNode = this.helper; this.prevPosition = this.currentPosition; } else { if (this.helper && isLineShapes(this.helper)) { if (!this.commandHandler.drawing.isLineInVerticalBounds && !this.commandHandler.drawing.isLineInHorizontalBounds) { this.currentPosition = this.prevPosition; this.startPosition = { x: this.startPosition.x + diffX, y: this.startPosition.y + diffY }; } else if (!this.commandHandler.drawing.isLineInVerticalBounds) { this.commandHandler.dragSelectedObjects(diffX, 0, this.pdfViewerBase.activeElements.activePageID, currentSelctor, this.helper); this.currentPosition = { x: this.currentPosition.x, y: this.prevPosition.y }; this.startPosition = { x: this.startPosition.x, y: this.startPosition.y + diffY }; } else if (!this.commandHandler.drawing.isLineInHorizontalBounds) { this.commandHandler.dragSelectedObjects(0, diffY, this.pdfViewerBase.activeElements.activePageID, currentSelctor, this.helper); this.currentPosition = { x: this.prevPosition.x, y: this.currentPosition.y }; this.startPosition = { x: this.startPosition.x + diffX, y: this.startPosition.y }; } this.prevNode = this.helper; this.prevPosition = this.currentPosition; } else { this.currentPosition = this.prevPosition; } } if (selectedItem && selectedItem.annotName) { this.commandHandler.annotation.triggerAnnotationMove(selectedItem, true); } } return true; }; /** * @private * @param {MouseEventArgs} args - Specified the mouse event arguments. * @returns {void} */ MoveTool.prototype.mouseLeave = function (args) { var currentSelctor = args.source.annotationSelectorSettings; var requiredX = this.offset.x + this.calculateMouseXDiff(); var requiredY = this.offset.y + this.calculateMouseYDiff(); var diffX = requiredX - args.source.wrapper.offsetX; var diffY = requiredY - args.source.wrapper.offsetY; this.commandHandler.dragSelectedObjects(diffX, diffY, this.prevPageId, currentSelctor, null); this.commandHandler.renderSelector(this.prevPageId, currentSelctor); _super.prototype.mouseLeave.call(this, args); }; /** * @private * @returns {void} */ MoveTool.prototype.endAction = function () { _super.prototype.endAction.call(this); this.currentTarget = null; this.prevPosition = null; }; MoveTool.prototype.checkisAnnotationMove = function (args) { if (this.commandHandler.selectedItems && this.commandHandler.selectedItems.annotations && this.commandHandler.selectedItems.annotations.length > 0) { if (this.commandHandler.selectedItems.annotations[0].annotName === args.source.annotName) { this.commandHandler.viewerBase.isAnnotationMouseMove = true; } } else { this.commandHandler.viewerBase.isAnnotationMouseMove = false; } if (this.commandHandler.selectedItems && this.commandHandler.selectedItems.formFields && this.commandHandler.selectedItems.formFields.length > 0) { if (this.commandHandler.selectedItems.formFields[0].name === args.source.name) { this.commandHandler.viewerBase.isFormFieldMouseMove = true; } } else { this.commandHandler.viewerBase.isFormFieldMouseMove = false; } }; return MoveTool; }(ToolBase)); export { MoveTool }; /** @hidden */ var StampTool = /** @class */ (function (_super) { __extends(StampTool, _super); function StampTool() { return _super !== null && _super.apply(this, arguments) || this; } /** * @private * @param {MouseEventArgs} args - Specified the mouse event arguments. * @returns {void} */ StampTool.prototype.mouseDown = function (args) { _super.prototype.mouseUp.call(this, args); }; /** * @private * @param {MouseEventArgs} args - Specified the mouse event arguments. * @returns {boolean} - Returns the true or false. */ StampTool.prototype.mouseMove = function (args) { var newObject; if (!this.inAction) { var pageIndex = this.pdfViewerBase.activeElements.activePageID; this.commandHandler.clearSelection(this.pdfViewerBase.activeElements.activePageID); var nodeElement = this.commandHandler.annotation.stampAnnotationModule.moveStampElement(args.position.x, args.position.y, pageIndex); if (nodeElement.shapeAnnotationType === 'SignatureText') { var textWidth = this.getTextWidth(nodeElement.data, nodeElement.fontSize, nodeElement.fontFamily); var widthRatio = 1; if (textWidth > nodeElement.bounds.width) { widthRatio = nodeElement.bounds.width / textWidth; } nodeElement.fontSize = this.getFontSize(Math.floor((nodeElement.fontSize * widthRatio))); var defaultFontSize = 32; // default font size. nodeElement.bounds.height = nodeElement.fontSize < defaultFontSize ? nodeElement.fontSize * 2 : nodeElement.bounds.height; nodeElement.thickness = 0; } newObject = this.commandHandler.add(nodeElement); args.source = this.commandHandler.annotations[this.commandHandler.annotations.length - 1]; args.sourceWrapper = args.source.wrapper; this.inAction = true; var currentSource = args.source; if (currentSource && (currentSource.shapeAnnotationType === 'HandWrittenSignature' || currentSource.shapeAnnotationType === 'SignatureText' || currentSource.shapeAnnotationType === 'SignatureImage')) { this['offset'] = { x: args.source.wrapper.offsetX - (args.source.wrapper.bounds.width / 2), y: args.source.wrapper.offsetY - (args.source.wrappe