From 6abf3d6ba3c2783a4d9c10f82e3c419c094f4c49 Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Fri, 24 Apr 2015 21:19:58 +0200 Subject: [PATCH] Simplify document properties field logic This patch: - Simplifies the way fields are passed to the document properties overlay - Simplifies the way fields are filled internally in the document properties overlay - Avoids passing a document properties reference to the secondary toolbar --- web/pdf_document_properties.js | 60 +++++++++++++--------------------- web/secondary_toolbar.js | 3 +- web/viewer.js | 27 +++++++-------- 3 files changed, 38 insertions(+), 52 deletions(-) diff --git a/web/pdf_document_properties.js b/web/pdf_document_properties.js index 7767d9a00..51e36ec59 100644 --- a/web/pdf_document_properties.js +++ b/web/pdf_document_properties.js @@ -20,7 +20,9 @@ /** * @typedef {Object} PDFDocumentPropertiesOptions - * @property {string} overlayName - Name/identifier for the overlay + * @property {string} overlayName - Name/identifier for the overlay. + * @property {Object} fields - Names and elements of the overlay's fields. + * @property {HTMLButtonElement} closeButton - Button for closing the overlay. */ /** @@ -32,24 +34,12 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() { * @param {PDFDocumentPropertiesOptions} options */ function PDFDocumentProperties(options) { + this.fields = options.fields; + this.overlayName = options.overlayName; + this.rawFileSize = 0; this.url = null; this.pdfDocument = null; - this.overlayName = options.overlayName; - - // Set the document property fields. - this.fileNameField = options.fileNameField || null; - this.fileSizeField = options.fileSizeField || null; - this.titleField = options.titleField || null; - this.authorField = options.authorField || null; - this.subjectField = options.subjectField || null; - this.keywordsField = options.keywordsField || null; - this.creationDateField = options.creationDateField || null; - this.modificationDateField = options.modificationDateField || null; - this.creatorField = options.creatorField || null; - this.producerField = options.producerField || null; - this.versionField = options.versionField || null; - this.pageCountField = options.pageCountField || null; // Bind the event listener for the Close button. if (options.closeButton) { @@ -125,33 +115,29 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() { return; } this.setFileSize(data.length); - this._updateUI(this.fileSizeField, this._parseFileSize()); + this._updateUI(this.fields['fileSize'], this._parseFileSize()); }.bind(this)); // Get the document properties. this.pdfDocument.getMetadata().then(function(data) { - var fields = [ - { field: this.fileNameField, - content: getPDFFileNameFromURL(this.url) }, - { field: this.fileSizeField, content: this._parseFileSize() }, - { field: this.titleField, content: data.info.Title }, - { field: this.authorField, content: data.info.Author }, - { field: this.subjectField, content: data.info.Subject }, - { field: this.keywordsField, content: data.info.Keywords }, - { field: this.creationDateField, - content: this._parseDate(data.info.CreationDate) }, - { field: this.modificationDateField, - content: this._parseDate(data.info.ModDate) }, - { field: this.creatorField, content: data.info.Creator }, - { field: this.producerField, content: data.info.Producer }, - { field: this.versionField, content: data.info.PDFFormatVersion }, - { field: this.pageCountField, content: this.pdfDocument.numPages } - ]; + var content = { + 'fileName': getPDFFileNameFromURL(this.url), + 'fileSize': this._parseFileSize(), + 'title': data.info.Title, + 'author': data.info.Author, + 'subject': data.info.Subject, + 'keywords': data.info.Keywords, + 'creationDate': this._parseDate(data.info.CreationDate), + 'modificationDate': this._parseDate(data.info.ModDate), + 'creator': data.info.Creator, + 'producer': data.info.Producer, + 'version': data.info.PDFFormatVersion, + 'pageCount': this.pdfDocument.numPages + }; // Show the properties in the dialog. - for (var item in fields) { - var element = fields[item]; - this._updateUI(element.field, element.content); + for (var identifier in content) { + this._updateUI(this.fields[identifier], content[identifier]); } }.bind(this)); }, diff --git a/web/secondary_toolbar.js b/web/secondary_toolbar.js index 0b3f3d596..2714d79f6 100644 --- a/web/secondary_toolbar.js +++ b/web/secondary_toolbar.js @@ -25,7 +25,6 @@ var SecondaryToolbar = { initialize: function secondaryToolbarInitialize(options) { this.toolbar = options.toolbar; - this.documentProperties = options.documentProperties; this.buttonContainer = this.toolbar.firstElementChild; // Define the toolbar buttons. @@ -115,7 +114,7 @@ var SecondaryToolbar = { }, documentPropertiesClick: function secondaryToolbarDocumentPropsClick(evt) { - this.documentProperties.open(); + PDFViewerApplication.pdfDocumentProperties.open(); this.close(); }, diff --git a/web/viewer.js b/web/viewer.js index a842a5de1..2cc02e566 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -177,18 +177,20 @@ var PDFViewerApplication = { this.pdfDocumentProperties = new PDFDocumentProperties({ overlayName: 'documentPropertiesOverlay', closeButton: document.getElementById('documentPropertiesClose'), - fileNameField: document.getElementById('fileNameField'), - fileSizeField: document.getElementById('fileSizeField'), - titleField: document.getElementById('titleField'), - authorField: document.getElementById('authorField'), - subjectField: document.getElementById('subjectField'), - keywordsField: document.getElementById('keywordsField'), - creationDateField: document.getElementById('creationDateField'), - modificationDateField: document.getElementById('modificationDateField'), - creatorField: document.getElementById('creatorField'), - producerField: document.getElementById('producerField'), - versionField: document.getElementById('versionField'), - pageCountField: document.getElementById('pageCountField') + fields: { + 'fileName': document.getElementById('fileNameField'), + 'fileSize': document.getElementById('fileSizeField'), + 'title': document.getElementById('titleField'), + 'author': document.getElementById('authorField'), + 'subject': document.getElementById('subjectField'), + 'keywords': document.getElementById('keywordsField'), + 'creationDate': document.getElementById('creationDateField'), + 'modificationDate': document.getElementById('modificationDateField'), + 'creator': document.getElementById('creatorField'), + 'producer': document.getElementById('producerField'), + 'version': document.getElementById('versionField'), + 'pageCount': document.getElementById('pageCountField') + } }); SecondaryToolbar.initialize({ @@ -204,7 +206,6 @@ var PDFViewerApplication = { lastPage: document.getElementById('lastPage'), pageRotateCw: document.getElementById('pageRotateCw'), pageRotateCcw: document.getElementById('pageRotateCcw'), - documentProperties: this.pdfDocumentProperties, documentPropertiesButton: document.getElementById('documentProperties') });