From 6be9c10ce6f0bea59f43046d3be7ea62f84f45b5 Mon Sep 17 00:00:00 2001 From: Eugen Neuber <eugen.neuber@tugraz.at> Date: Mon, 8 Jun 2020 15:48:27 +0200 Subject: [PATCH] Sync PDF preview and signature positioning (qualified -> official) See issues #12 and #14 --- assets/official-signature-placeholder.png | Bin 0 -> 66227 bytes rollup.config.js | 2 +- src/i18n/de/translation.json | 22 +- src/i18n/en/translation.json | 22 +- src/vpu-official-signature-pdf-upload.js | 922 ++++++++++++++++++++-- src/vpu-pdf-preview.js | 12 +- 6 files changed, 897 insertions(+), 83 deletions(-) create mode 100644 assets/official-signature-placeholder.png diff --git a/assets/official-signature-placeholder.png b/assets/official-signature-placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..74a60188d4ec6dca162549dd63919a5a3a506e1b GIT binary patch literal 66227 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≦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 z
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 UJ0t%4Y2qMRPgg&ebxsLQ07e-y!T<mO literal 0 HcmV?d00001 diff --git a/rollup.config.js b/rollup.config.js index db470c6..2befe42 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -256,7 +256,7 @@ Dependencies: {src: 'node_modules/vpu-common/src/spinner.js', dest: 'dist/local/' + pkg.name, rename: 'spinner.js'}, {src: 'node_modules/vpu-common/misc/browser-check.js', dest: 'dist/local/' + pkg.name, rename: 'browser-check.js'}, {src: 'assets/icon-*.png', dest: 'dist/local/' + pkg.name}, - {src: 'assets/signature-placeholder.png', dest: 'dist/local/' + pkg.name}, + {src: 'assets/*-placeholder.png', dest: 'dist/local/' + pkg.name}, {src: 'assets/manifest.json', dest: 'dist', rename: pkg.name + '.manifest.json'}, {src: 'assets/*.metadata.json', dest: 'dist'}, {src: 'node_modules/vpu-common/assets/icons/*.svg', dest: 'dist/local/vpu-common/icons'}, diff --git a/src/i18n/de/translation.json b/src/i18n/de/translation.json index eab8194..eebc71a 100644 --- a/src/i18n/de/translation.json +++ b/src/i18n/de/translation.json @@ -2,6 +2,22 @@ "official-pdf-upload": { "upload-field-label": "PDF-Dokumente zum Signieren hochladen", "upload-area-text": "Sie können in diesem Bereich PDF-Dokumente per Drag & Drop oder per Direktauswahl hochladen", + "current-signing-process-label": "Aktueller Signaturprozess", + "queued-files-label": "Dokumente in der Warteschlange", + "queued-files-empty1": "Kein Dokument in der Warteschlange", + "queued-files-empty2": "Sie können jetzt ein neues Dokument hochladen", + "remove-failed-file-button-title": "Fehlgeschlagenes Dokument entfernen", + "remove-queued-file-button-title": "Dokument aus der Warteschlange entfernen", + "clear-all": "Alle entfernen", + "start-signing-process-button": "Signatur starten", + "stop-signing-process-button": "Signieren unterbrechen", + "show-preview": "Dokument anzeigen", + "positioning-automatic": "Automatisch", + "positioning-manual": "Manuell", + "close-preview": "Dokumentansicht schließen", + "preview-label": "Dokumentenansicht", + "start-signing-process-button-running-title": "Signaturvorgang läuft gerade", + "remove-current-file-button-title": "Aktuellen Signaturprozess abbrechen", "signed-files-label": "Signierte Dokumente", "download-zip-button": "Als ZIP Datei herunterladen", "download-zip-button-tooltip": "Alle signierten Dokumente als ZIP Datei herunterladen", @@ -11,7 +27,11 @@ "re-upload-file-button-title": "Erneut hochladen", "upload-status-file-text": "({{fileSize}}) wird hochgeladen und verarbeitet...", "re-upload-all-button": "Alle erneut hochladen", - "re-upload-all-button-title": "Alle fehlgeschlagen Uploads erneut hochladen" + "re-upload-all-button-title": "Alle fehlgeschlagen Uploads erneut hochladen", + "signature-placement-label": "Signatur platzieren", + "positioning": "Positionierung", + "file-label": "Dokument", + "confirm-page-leave": "Sind Sie sicher, dass Sie die Seite verlassen wollen? Es stehen signierte Dokumente zum Download bereit." }, "qualified-pdf-upload": { "upload-field-label": "PDF-Dokumente zum Signieren hochladen", diff --git a/src/i18n/en/translation.json b/src/i18n/en/translation.json index 60d33f2..b2036da 100644 --- a/src/i18n/en/translation.json +++ b/src/i18n/en/translation.json @@ -2,6 +2,22 @@ "official-pdf-upload": { "upload-field-label": "Upload PDF-files to sign", "upload-area-text": "In this area you can upload PDF-files via Drag & Drop or by selecting them directly", + "current-signing-process-label": "Current signing process", + "queued-files-label": "Queued documents", + "queued-files-empty1": "No queued documents", + "queued-files-empty2": "You can now upload more documents", + "remove-failed-file-button-title": "Remove failed document", + "remove-queued-file-button-title": "Remove document from queue", + "clear-all": "Clear all", + "start-signing-process-button": "Start signing", + "stop-signing-process-button": "Stop signing", + "show-preview": "Show document", + "positioning-automatic": "Automatic", + "positioning-manual": "Manual", + "close-preview": "Close preview", + "preview-label": "Document view", + "start-signing-process-button-running-title": "Signing process running", + "remove-current-file-button-title": "Cancel current signing process", "signed-files-label": "Signed files", "download-zip-button": "Download ZIP", "download-zip-button-tooltip": "Download all signed files as ZIP file", @@ -11,7 +27,11 @@ "re-upload-file-button-title": "Upload again", "upload-status-file-text": "({{fileSize}}) is currently uploading and being processed...", "re-upload-all-button": "Upload all", - "re-upload-all-button-title": "Upload all failed uploads again" + "re-upload-all-button-title": "Upload all failed uploads again", + "signature-placement-label": "Place signature", + "positioning": "Positioning", + "file-label": "document", + "confirm-page-leave": "Are you sure you want to leave this page? There are still signed documents ready to be downloaded." }, "qualified-pdf-upload": { "upload-field-label": "Upload PDF-documents to sign", diff --git a/src/vpu-official-signature-pdf-upload.js b/src/vpu-official-signature-pdf-upload.js index 69c07d2..2a12745 100644 --- a/src/vpu-official-signature-pdf-upload.js +++ b/src/vpu-official-signature-pdf-upload.js @@ -3,15 +3,16 @@ import {humanFileSize} from 'vpu-common/i18next.js'; import {css, html} from 'lit-element'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import VPUSignatureLitElement from "./vpu-signature-lit-element"; +import {PdfPreview} from "./vpu-pdf-preview"; import * as commonUtils from 'vpu-common/utils'; -import {Icon, MiniSpinner, Button} from 'vpu-common'; import * as utils from './utils'; -import JSZip from 'jszip/dist/jszip.js'; +import {Icon, MiniSpinner, Button} from 'vpu-common'; import FileSaver from 'file-saver'; import * as commonStyles from 'vpu-common/styles'; import {classMap} from 'lit-html/directives/class-map.js'; import {FileUpload} from 'vpu-file-upload'; import JSONLD from "vpu-common/jsonld"; +import {TextSwitch} from './textswitch.js'; const i18n = createI18nInstance(); @@ -20,24 +21,45 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem super(); this.lang = i18n.language; this.entryPointUrl = commonUtils.getAPiUrl(); + this.signedFiles = []; this.signedFilesCount = 0; this.errorFiles = []; this.errorFilesCount = 0; this.uploadInProgress = false; + this.queueingInProgress = false; this.uploadStatusFileName = ""; this.uploadStatusText = ""; + this.currentFile = {}; + this.currentFileName = ""; + this.currentFilePlacementMode = ""; + this.currentFileSignaturePlacement = {}; + this.queueBlockEnabled = false; + this.queuedFiles = []; + this.queuedFilesCount = 0; + this.signingProcessEnabled = false; + this.signingProcessActive = false; + this.signaturePlacementInProgress = false; + this.withSigBlock = false; + this.queuedFilesSignaturePlacements = []; + this.queuedFilesPlacementModes = []; + this.currentPreviewQueueKey = ''; // will be set in function update + this.signingUrl = ""; + + } static get scopedElements() { return { 'vpu-icon': Icon, 'vpu-fileupload': FileUpload, + 'vpu-pdf-preview': PdfPreview, 'vpu-mini-spinner': MiniSpinner, 'vpu-button': Button, + 'vpu-textswitch': TextSwitch, }; } @@ -47,31 +69,300 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem entryPointUrl: { type: String, attribute: 'entry-point-url' }, signedFiles: { type: Array, attribute: false }, signedFilesCount: { type: Number, attribute: false }, + queuedFilesCount: { type: Number, attribute: false }, errorFiles: { type: Array, attribute: false }, errorFilesCount: { type: Number, attribute: false }, uploadInProgress: { type: Boolean, attribute: false }, + queueingInProgress: { type: Boolean, attribute: false }, uploadStatusFileName: { type: String, attribute: false }, uploadStatusText: { type: String, attribute: false }, + + signingProcessEnabled: { type: Boolean, attribute: false }, + signingProcessActive: { type: Boolean, attribute: false }, + queueBlockEnabled: { type: Boolean, attribute: false }, + currentFile: { type: Object, attribute: false }, + currentFileName: { type: String, attribute: false }, + signaturePlacementInProgress: { type: Boolean, attribute: false }, + withSigBlock: { type: Boolean, attribute: false }, + isSignaturePlacement: { type: Boolean, attribute: false }, }; } connectedCallback() { super.connectedCallback(); + // needs to be called in a function to get the variable scope of "this" + setInterval(() => { this.handleQueuedFiles(); }, 1000); + + + + + + + + + } + + /* disconnectedCallback() + + + + + + */ + + onQueuedFilesChanged(ev) { + const detail = ev.detail; + if (!this.queueBlockEnabled && detail.queuedFilesCount) + this.queueBlockEnabled = true; + this.queuedFiles = detail.queuedFiles; + this.queuedFilesCount = detail.queuedFilesCount; + } + + /** + * Processes queued files + */ + async handleQueuedFiles() { + + this.endSigningProcessIfQueueEmpty(); + + if (this.queuedFilesCount === 0) { + // reset signingProcessEnabled button + this.signingProcessEnabled = false; + + return; + } + + if (!this.signingProcessEnabled || this.uploadInProgress) { + return; + } + + this.signaturePlacementInProgress = false; + + const key = Object.keys(this.queuedFiles)[0]; + + // take the file off the queue + let file = this.takeFileFromQueue(key); + this.currentFile = file; + + // set placement mode and parameters to restore them when canceled + this.currentFilePlacementMode = this.queuedFilesPlacementModes[key]; + this.currentFileSignaturePlacement = this.queuedFilesSignaturePlacements[key]; + + this.uploadInProgress = true; + let params = {}; + + // prepare parameters to tell PDF-AS where and how the signature should be placed + if (this.queuedFilesPlacementModes[key] === "manual") { + const data = this.queuedFilesSignaturePlacements[key]; + + if (data !== undefined) { + let angle = data.angle; + let bottom = data.bottom; + let left = data.left; + + if (angle !== 0) { + // attempt to adapt positioning in the rotated states to fit PDF-AS + switch (angle) { + case 90: + // 321 / 118; + bottom += data.width / 2.72034; + left -= data.width / 2.72034; + break; + case 180: + // 321 / 237; + bottom += data.width / 1.3544; + break; + case 270: + left += data.height; + bottom += data.height; + break; + } + + // adapt rotation to fit PDF-AS + const rotations = {0: 0, 90: 270, 180: 180, 270: 90}; + angle = rotations[data.angle]; + } + + params = { + y: Math.round(bottom), + x: Math.round(left), + r: angle, + w: Math.round(data.width), // only width, no "height" allowed in PDF-AS + p: data.currentPage + }; + } + } + + await this._("#file-upload").uploadFile(file, params); + this.uploadInProgress = false; + } + + storePDFData(event) { + const data = event.detail; + + this.queuedFilesSignaturePlacements[this.currentPreviewQueueKey] = data; + this.signaturePlacementInProgress = false; + } + + /** + * Called when preview is "canceled" + * + * @param event + */ + hidePDF(event) { + // reset placement mode to "auto" if no placement was confirmed previously + if (this.queuedFilesSignaturePlacements[this.currentPreviewQueueKey] === undefined) { + this.queuedFilesPlacementModes[this.currentPreviewQueueKey] = "auto"; + } + + this.signaturePlacementInProgress = false; + } + + queuePlacementSwitch(key, name) { + this.queuedFilesPlacementModes[key] = name; + console.log(name); + + if (name === "manual") { + this.showPreview(key, true); + } else if (this.currentPreviewQueueKey === key) { + this.signaturePlacementInProgress = false; + } + } + + /** + * Decides if the "beforeunload" event needs to be canceled + * + * @param event + */ + onReceiveBeforeUnload(event) { + // we don't need to stop if there are no signed files + if (this.signedFilesCount === 0) { + return; + } + + // we need to handle custom events ourselves + if (!event.isTrusted) { + // note that this only works with custom event since calls of "confirm" are ignored + // in the non-custom event, see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event + const result = confirm(i18n.t('official-pdf-upload.confirm-page-leave')); + + // don't stop the page leave if the user wants to leave + if (result) { + return; + } + } + + // Cancel the event as stated by the standard + event.preventDefault(); + + // Chrome requires returnValue to be set + event.returnValue = ''; + } + + /* onReceiveIframeMessage(event) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + */ + + endSigningProcessIfQueueEmpty() { + if (this.queuedFilesCount === 0 && this.signingProcessActive) { + this.signingProcessActive = false; + } } /** * @param ev */ onAllUploadStarted(ev) { - console.log("Start upload process!"); - this.uploadInProgress = true; + console.log("Start queuing process!"); + this.queueingInProgress = true; + } + + /** + * @param ev + */ + onAllUploadFinished(ev) { + console.log("Finished queuing process!"); + this.queueingInProgress = false; } /** * @param ev */ onFileUploadStarted(ev) { - console.log(ev); this.uploadStatusFileName = ev.detail.fileName; this.uploadStatusText = i18n.t('official-pdf-upload.upload-status-file-text', { fileName: ev.detail.fileName, @@ -79,29 +370,41 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem }); } + addToErrorFiles(file) { + this.endSigningProcessIfQueueEmpty(); + + // this doesn't seem to trigger an update() execution + this.errorFiles[Math.floor(Math.random() * 1000000)] = file; + // this triggers the correct update() execution + this.errorFilesCount++; + + if (window._paq !== undefined) { + window._paq.push(['trackEvent', 'officiallySigning', 'SigningFailed', file.json["hydra:description"]]); + } + } + /** * @param ev */ onFileUploadFinished(ev) { if (ev.detail.status !== 201) { - // this doesn't seem to trigger an update() execution - this.errorFiles[Math.floor(Math.random() * 1000000)] = ev.detail; - // this triggers the correct update() execution - this.errorFilesCount++; + this.addToErrorFiles(ev.detail); } else if (ev.detail.json["@type"] === "http://schema.org/MediaObject" ) { // this doesn't seem to trigger an update() execution this.signedFiles.push(ev.detail.json); // this triggers the correct update() execution this.signedFilesCount++; - } - } - /** - * @param ev - */ - onAllUploadFinished(ev) { - console.log("Finished upload process!"); - this.uploadInProgress = false; + + const entryPoint = data.json; + this.currentFileName = entryPoint.name; + + + + + + this.endSigningProcessIfQueueEmpty(); + } } update(changedProperties) { @@ -113,12 +416,13 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem case "entryPointUrl": JSONLD.initialize(this.entryPointUrl, (jsonld) => { const apiUrlBase = jsonld.getApiUrlForEntityName("OfficiallySignedDocument"); + this.signingUrl = apiUrlBase + "/sign"; }); break; } - console.log(propName, oldValue); + // console.log(propName, oldValue); }); super.update(changedProperties); @@ -131,8 +435,9 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem /** * Download signed pdf-files as zip */ - zipDownloadClickHandler() { + async zipDownloadClickHandler() { // see: https://stuk.github.io/jszip/ + let JSZip = (await import('jszip/dist/jszip.js')).default; let zip = new JSZip(); const that = this; let fileNames = []; @@ -150,12 +455,9 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem zip.file(fileName, utils.getPDFFileBase64Content(file), {base64: true}); }); - zip.generateAsync({type:"blob"}) - .then(function(content) { - FileSaver.saveAs(content, "signed-documents.zip"); - - that._("#zip-download-button").stop(); - }); + let content = await zip.generateAsync({type:"blob"}); + FileSaver.saveAs(content, "signed-documents.zip"); + that._("#zip-download-button").stop(); } /** @@ -189,17 +491,82 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem } /** - * Uploads a failed pdf-file again + * Queues a failed pdf-file again * * @param file * @param id */ - async fileUploadClickHandler(file, id) { - this.uploadInProgress = true; - this.errorFiles.splice(id, 1); + async fileQueueingClickHandler(file, id) { + this.takeFailedFileFromQueue(id); + + return this._("#file-upload").queueFile(file); + } + + /** + * Shows the preview + * + * @param key + * @param withSigBlock + */ + async showPreview(key, withSigBlock=false) { + if (this.signingProcessEnabled) { + return; + } + + const file = this._("#file-upload").getQueuedFile(key); + this.currentFile = file; + this.currentPreviewQueueKey = key; + console.log(file); + // start signature placement process + this.signaturePlacementInProgress = true; + this.withSigBlock = withSigBlock; + + const previewTag = this.constructor.getScopedTagName("vpu-pdf-preview"); + await this._(previewTag).showPDF( + file, + withSigBlock, //this.queuedFilesPlacementModes[key] === "manual", + this.queuedFilesSignaturePlacements[key]); + } + + /** + * Takes a file off of the queue + * + * @param key + */ + takeFileFromQueue(key) { + return this._("#file-upload").takeFileFromQueue(key); + } + + /** + * Takes a failed file off of the queue + * + * @param key + */ + takeFailedFileFromQueue(key) { + const file = this.errorFiles.splice(key, 1); this.errorFilesCount = Object.keys(this.errorFiles).length; - await this._("#file-upload").uploadFile(file); - this.uploadInProgress = false; + + return file; + } + + clearQueuedFiles() { + this.queuedFilesSignaturePlacements = []; + this.queuedFilesPlacementModes = []; + this._("#file-upload").clearQueuedFiles(); + } + + clearSignedFiles() { + this.signedFiles = []; + this.signedFilesCount = 0; + } + + clearErrorFiles() { + this.errorFiles = []; + this.errorFilesCount = 0; + } + + isUserInterfaceDisabled() { + return this.signaturePlacementInProgress || this.externalAuthInProgress || this.uploadInProgress; } static get styles() { @@ -210,14 +577,46 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem ${commonStyles.getButtonCSS()} ${commonStyles.getNotificationCSS()} + #pdf-preview { + min-width: 320px; + } + + h2:first-child { + margin-top: 0; + } + + h2 { + margin-bottom: 10px; + } + strong { font-weight: 600; } + #pdf-preview .box-header { + border: 1px solid #000; + border-bottom-width: 0; + padding: 0.5em 0.5em 0 0.5em; + } + .hidden { display: none; } + + + + + + + + + + + .files-block.field:not(:last-child) { + margin-bottom: 40px; + } + .files-block .file { margin: 10px 0; } @@ -247,84 +646,453 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(VPUSignatureLitElem margin-right: 5px; } - .error { + .error, #cancel-signing-process { color: #e4154b; } + + #cancel-signing-process:hover { + color: white; + } + + /* using vpu-icon doesn't work */ + button > [name=close], a > [name=close] { + font-size: 0.8em; + } + + a > [name=close] { + color: red; + } + + .empty-queue { + margin: 10px 0; + } + + #grid-container { + display: flex; + flex-flow: row wrap; + } + + #grid-container > div { + margin-right: 20px; + } + + #grid-container > div:last-child { + margin-right: 0; + flex: 1 0; + } + + .file-block { + max-width: 320px; + } + + .file-block, .box { + border: solid 1px black; + padding: 10px; + } + + .file-block, .box .file { + margin-top: 0; + } + + .file-block { + margin-bottom: 10px; + } + + .file-block .header { + display: grid; + align-items: center; + grid-template-columns: auto 40px; + grid-gap: 10px; + } + + .file-block.error .header { + grid-template-columns: auto 80px; + } + + .file-block.error .header .buttons { + white-space: nowrap; + } + + .file-block div.bottom-line { + display: grid; + align-items: center; + grid-template-columns: auto 190px; + grid-gap: 10px; + margin-top: 10px; + } + + .file-block.error div.bottom-line { + display: block; + } + + .file-block div.bottom-line .headline { + text-align: right; + } + + .file-block .filename, .file-block div.bottom-line .headline { + text-overflow: ellipsis; + overflow: hidden; + } + + .file-block .filename { + white-space: nowrap; + } + + #pdf-preview .button.is-cancel, #external-auth .button.is-cancel { + color: #e4154b; + } + + #external-auth iframe { + margin-top: 0.5em; + } + + .is-right { + float: right; + } + + .error-files .header { + color: black; + } + + /* prevent hovering of disabled default button */ + .button[disabled]:not(.is-primary):hover { + background-color: inherit; + color: inherit; + } + + .is-disabled, .is-disabled.button[disabled] { + opacity: 0.2; + pointer-events: none; + } + + #pdf-preview .box-header, #external-auth .box-header { + display: flex; + justify-content: space-between; + align-items: start; + } + + #pdf-preview .box-header .filename, #external-auth .box-header .filename { + overflow: hidden; + text-overflow: ellipsis; + margin-right: 0.5em; + } + + /* Handling for small displays (like mobile devices) */ + @media (max-width: 680px) { + /* Modal preview, upload and external auth */ + div.right-container > * { + position: fixed; + padding: 10px; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: white; + overflow-y: scroll; + } + + /* Don't use the whole screen for the upload progress */ + #upload-progress { + top: 10px; + left: 10px; + right: 10px; + bottom: inherit; + } + + #grid-container > div { + margin-right: 0; + width: 100%; + } + + .file-block { + max-width: inherit; + } + } `; } + /** + * Returns the list of queued files + * + * @returns {*[]} + */ + getQueuedFilesHtml() { + const ids = Object.keys(this.queuedFiles); + let results = []; + + ids.forEach((id) => { + const file = this.queuedFiles[id]; + + results.push(html` + <div class="file-block"> + <div class="header"> + <span class="filename"><strong>${file.name}</strong> (${humanFileSize(file.size)})</span> + <button class="button close" + ?disabled="${this.signingProcessEnabled}" + title="${i18n.t('official-pdf-upload.remove-queued-file-button-title')}" + @click="${() => { this.takeFileFromQueue(id); }}"> + <vpu-icon name="trash"></vpu-icon></button> + </div> + <div class="bottom-line"> + <div></div> + <button class="button" + ?disabled="${this.signingProcessEnabled}" + @click="${() => { this.showPreview(id); }}">${i18n.t('official-pdf-upload.show-preview')}</button> + <span class="headline">${i18n.t('official-pdf-upload.positioning')}:</span> + <vpu-textswitch name1="auto" + name2="manual" + name="${this.queuedFilesPlacementModes[id] || "auto"}" + class="switch" + value1="${i18n.t('official-pdf-upload.positioning-automatic')}" + value2="${i18n.t('official-pdf-upload.positioning-manual')}" + ?disabled="${this.signingProcessEnabled}" + @change=${ (e) => this.queuePlacementSwitch(id, e.target.name) }></vpu-textswitch> + </div> + </div> + `); + }); + + return results; + } + + /** + * Returns the list of successfully signed files + * + * @returns {*[]} + */ getSignedFilesHtml() { - return this.signedFiles.map(file => html` - <div class="file"> - <a class="is-download" - title="${i18n.t('official-pdf-upload.download-file-button-title')}" - @click="${() => {this.fileDownloadClickHandler(file);}}"> - <strong>${file.name}</strong> (${humanFileSize(file.contentSize)}) <vpu-icon name="download"></vpu-icon></a> - </div> - `); + const ids = Object.keys(this.signedFiles); + let results = []; + + ids.forEach((id) => { + const file = this.signedFiles[id]; + + results.push(html` + <div class="file-block"> + <div class="header"> + <span class="filename"><strong>${file.name}</strong> (${humanFileSize(file.contentSize)})</span> + <button class="button close" + title="${i18n.t('official-pdf-upload.download-file-button-title')}" + @click="${() => { this.fileDownloadClickHandler(file); }}"> + <vpu-icon name="download"></vpu-icon></button> + </div> + </div> + `); + }); + + return results; } + /** + * Returns the list of files of failed signature processes + * + * @returns {*[]} + */ getErrorFilesHtml() { - return this.errorFiles.map((data, id) => html` - <div class="file"> - <div class="button-box"> - <button class="button is-small" - title="${i18n.t('official-pdf-upload.re-upload-file-button-title')}" - @click="${() => {this.fileUploadClickHandler(data.file, id);}}"><vpu-icon name="reload"></vpu-icon></button> - </div> - <div class="info"> - <strong>${data.file.name}</strong> (${humanFileSize(data.file.size)}) - <strong class="error">${data.json["hydra:description"]}</strong> + const ids = Object.keys(this.errorFiles); + let results = []; + + ids.forEach((id) => { + const data = this.errorFiles[id]; + + results.push(html` + <div class="file-block error"> + <div class="header"> + <span class="filename"><strong>${data.file.name}</strong> (${humanFileSize(data.file.size)})</span> + <div class="buttons"> + <button class="button" + title="${i18n.t('official-pdf-upload.re-upload-file-button-title')}" + @click="${() => {this.fileQueueingClickHandler(data.file, id);}}"><vpu-icon name="reload"></vpu-icon></button> + <button class="button" + title="${i18n.t('official-pdf-upload.remove-failed-file-button-title')}" + @click="${() => { this.takeFailedFileFromQueue(id); }}"> + <vpu-icon name="trash"></vpu-icon></button> + </div> + </div> + <div class="bottom-line"> + <strong class="error">${data.json["hydra:description"]}</strong> + </div> </div> - </div> - `); + `); + }); + + return results; } hasSignaturePermissions() { return this._hasSignaturePermissions('ROLE_SCOPE_OFFICIAL-SIGNATURE'); } + /* stopSigningProcess() + + + + + + + + + + + + + + + + + */ + render() { return html` <div class="${classMap({hidden: !this.isLoggedIn() || !this.hasSignaturePermissions() || this.isLoading()})}"> <div class="field"> <h2>${i18n.t('official-pdf-upload.upload-field-label')}</h2> <div class="control"> - <vpu-fileupload id="file-upload" lang="${this.lang}" url="${this.signingUrl}" accept="application/pdf" + <vpu-fileupload id="file-upload" + allowed-mime-types="application/pdf" + decompress-zip + always-send-file + deferred + lang="${this.lang}" + url="${this.signingUrl}" + ?disabled="${this.signingProcessActive}" text="${i18n.t('official-pdf-upload.upload-area-text')}" button-label="${i18n.t('official-pdf-upload.upload-button-label')}" @vpu-fileupload-all-start="${this.onAllUploadStarted}" @vpu-fileupload-file-start="${this.onFileUploadStarted}" @vpu-fileupload-file-finished="${this.onFileUploadFinished}" @vpu-fileupload-all-finished="${this.onAllUploadFinished}" + @vpu-fileupload-queued-files-changed="${this.onQueuedFilesChanged}" ></vpu-fileupload> </div> </div> - <div class="field notification is-info ${classMap({hidden: !this.uploadInProgress})}"> - <vpu-mini-spinner></vpu-mini-spinner> - <strong>${this.uploadStatusFileName}</strong> - ${this.uploadStatusText} - </div> - <div class="files-block field ${classMap({hidden: this.signedFilesCount === 0})}"> - <h2>${i18n.t('official-pdf-upload.signed-files-label')}</h2> - <div class="control"> - ${this.getSignedFilesHtml()} + <div id="grid-container"> + <div class="left-container"> + <div class="files-block field ${classMap({hidden: !this.queueBlockEnabled})}"> + <!-- Queued files headline and queueing spinner --> + <h2 class="${classMap({"is-disabled": this.isUserInterfaceDisabled()})}"> + ${i18n.t('official-pdf-upload.queued-files-label')} + <vpu-mini-spinner id="queueing-in-progress-spinner" + style="font-size: 0.7em" + class="${classMap({hidden: !this.queueingInProgress})}"></vpu-mini-spinner> + </h2> + <!-- Buttons to start/stop signing process and clear queue --> + <div class="control field"> + <button @click="${this.clearQueuedFiles}" + ?disabled="${this.queuedFilesCount === 0 || this.signingProcessActive || this.isUserInterfaceDisabled()}" + class="button ${classMap({"is-disabled": this.isUserInterfaceDisabled()})}"> + ${i18n.t('official-pdf-upload.clear-all')} + </button> + <button @click="${() => { this.signingProcessEnabled = true; this.signingProcessActive = true; }}" + ?disabled="${this.queuedFilesCount === 0}" + class="button is-right is-primary ${classMap({"is-disabled": this.isUserInterfaceDisabled()})}"> + ${i18n.t('official-pdf-upload.start-signing-process-button')} + </button> + <!-- --> + <button @click="${this.stopSigningProcess}" + ?disabled="${this.uploadInProgress}" + id="cancel-signing-process" + class="button is-right ${classMap({hidden: !this.signingProcessActive})}"> + ${i18n.t('official-pdf-upload.stop-signing-process-button')} + </button> + <!-- --> + </div> + <!-- List of queued files --> + <div class="control file-list ${classMap({"is-disabled": this.isUserInterfaceDisabled()})}"> + ${this.getQueuedFilesHtml()} + </div> + <!-- Text "queue empty" --> + <div class="empty-queue control ${classMap({hidden: this.queuedFilesCount !== 0, "is-disabled": this.isUserInterfaceDisabled()})}"> + ${i18n.t('official-pdf-upload.queued-files-empty1')}<br /> + ${i18n.t('official-pdf-upload.queued-files-empty2')} + </div> + </div> + <!-- List of signed PDFs --> + <div class="files-block field ${classMap({hidden: this.signedFilesCount === 0, "is-disabled": this.isUserInterfaceDisabled()})}"> + <h2>${i18n.t('official-pdf-upload.signed-files-label')}</h2> + <!-- Button to download all signed PDFs --> + <div class="field ${classMap({hidden: this.signedFilesCount === 0})}"> + <div class="control"> + <button @click="${this.clearSignedFiles}" + class="button"> + ${i18n.t('official-pdf-upload.clear-all')} + </button> + <vpu-button id="zip-download-button" + value="${i18n.t('official-pdf-upload.download-zip-button')}" + title="${i18n.t('official-pdf-upload.download-zip-button-tooltip')}" + class="is-right" + @click="${this.zipDownloadClickHandler}" + type="is-primary"></vpu-button> + </div> + </div> + <div class="control"> + ${this.getSignedFilesHtml()} + </div> + </div> + <!-- List of errored files --> + <div class="files-block error-files field ${classMap({hidden: this.errorFilesCount === 0, "is-disabled": this.isUserInterfaceDisabled()})}"> + <h2>${i18n.t('official-pdf-upload.error-files-label')}</h2> + <!-- Button to upload errored files again --> + <div class="field ${classMap({hidden: this.errorFilesCount === 0})}"> + <div class="control"> + <button @click="${this.clearErrorFiles}" + class="button"> + ${i18n.t('official-pdf-upload.clear-all')} + </button> + <vpu-button id="re-upload-all-button" + ?disabled="${this.uploadInProgress}" + value="${i18n.t('official-pdf-upload.re-upload-all-button')}" + title="${i18n.t('official-pdf-upload.re-upload-all-button-title')}" + class="is-right" + @click="${this.reUploadAllClickHandler}" + type="is-primary"></vpu-button> + </div> + </div> + <div class="control"> + ${this.getErrorFilesHtml()} + </div> + </div> </div> - </div> - <div class="field ${classMap({hidden: this.signedFilesCount === 0})}"> - <div class="control"> - <vpu-button id="zip-download-button" value="${i18n.t('official-pdf-upload.download-zip-button')}" title="${i18n.t('official-pdf-upload.download-zip-button-tooltip')}" @click="${this.zipDownloadClickHandler}" type="is-primary"></vpu-button> - </div> - </div> - <div class="files-block error-files field ${classMap({hidden: this.errorFilesCount === 0})}"> - <h2 class="error">${i18n.t('official-pdf-upload.error-files-label')}</h2> - <div class="control"> - ${this.getErrorFilesHtml()} - </div> - </div> - <div class="field ${classMap({hidden: this.errorFilesCount === 0})}"> - <div class="control"> - <vpu-button id="re-upload-all-button" ?disabled="${this.uploadInProgress}" value="${i18n.t('official-pdf-upload.re-upload-all-button')}" title="${i18n.t('official-pdf-upload.re-upload-all-button-title')}" @click="${this.reUploadAllClickHandler}" type="is-primary"></vpu-button> + <div class="right-container"> + <!-- PDF preview --> + <div id="pdf-preview" class="field ${classMap({hidden: !this.signaturePlacementInProgress})}"> + <h2>${this.withSigBlock ? i18n.t('official-pdf-upload.signature-placement-label') : i18n.t('official-pdf-upload.preview-label')}</h2> + <div class="box-header"> + <div class="filename"> + <strong>${this.currentFile.name}</strong> (${humanFileSize(this.currentFile !== undefined ? this.currentFile.size : 0)}) + </div> + <button class="button is-cancel" + @click="${this.hidePDF}"><vpu-icon name="close"></vpu-icon></button> + </div> + <vpu-pdf-preview lang="${this.lang}" + signature-placeholder-image="official-signature-placeholder.png" + signature-width="147" + signature-height="29" + @vpu-pdf-preview-accept="${this.storePDFData}" + @vpu-pdf-preview-cancel="${this.hidePDF}"></vpu-pdf-preview> + </div> + <!-- File upload progress --> + <div id="upload-progress" class="field notification is-info ${classMap({hidden: !this.uploadInProgress})}"> + <vpu-mini-spinner></vpu-mini-spinner> + <strong>${this.uploadStatusFileName}</strong> + ${this.uploadStatusText} + </div> + <!-- External auth --> + + + + + + + + + + + + + + + </div> </div> </div> diff --git a/src/vpu-pdf-preview.js b/src/vpu-pdf-preview.js index ea9e2cf..76445cf 100644 --- a/src/vpu-pdf-preview.js +++ b/src/vpu-pdf-preview.js @@ -29,6 +29,9 @@ export class PdfPreview extends ScopedElementsMixin(VPULitElement) { this.fabricCanvas = null; this.canvasToPdfScale = 1.0; this.currentPageOriginalHeight = 0; + this.placeholder = 'signature-placeholder.png'; + this.signature_width = 80; + this.signature_height = 29; this._onWindowResize = this._onWindowResize.bind(this); } @@ -51,6 +54,9 @@ export class PdfPreview extends ScopedElementsMixin(VPULitElement) { isPageRenderingInProgress: { type: Boolean, attribute: false }, isPageLoaded: { type: Boolean, attribute: false }, isShowPlacement: { type: Boolean, attribute: false }, + placeholder: { type: String, attribute: 'signature-placeholder-image' }, + signature_width: { type: Number, attribute: 'signature-width' }, + signature_height: { type: Number, attribute: 'signature-height' }, }; } @@ -99,7 +105,7 @@ export class PdfPreview extends ScopedElementsMixin(VPULitElement) { }); // add signature image - fabric.Image.fromURL(commonUtils.getAssetURL('local/vpu-signature/signature-placeholder.png'), function(image) { + fabric.Image.fromURL(commonUtils.getAssetURL('local/vpu-signature/' + this.placeholder), function(image) { // add a red border around the signature placeholder image.set({stroke: "#e4154b", strokeWidth: 8}); @@ -288,7 +294,7 @@ export class PdfPreview extends ScopedElementsMixin(VPULitElement) { // set the initial position of the signature if (initSignature) { - const sigSizeMM = {width: 80, height: 29}; + const sigSizeMM = {width: this.signature_width, height: this.signature_height}; const sigPosMM = {top: 5, left: 5}; const inchPerMM = 0.03937007874; @@ -369,7 +375,7 @@ export class PdfPreview extends ScopedElementsMixin(VPULitElement) { } /** - * Rotates the signature clock-wise in 90� steps + * Rotates the signature clock-wise in 90� steps */ async rotateSignature() { let signature = this.getSignatureRect(); -- GitLab