From 1a5de56675d4952d5ffb8d281caade94e820a848 Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Fri, 24 Apr 2015 21:01:03 +0200 Subject: [PATCH] Group public/private methods and add comments This patch: - Puts public methods at the top of the file - Puts private methods below the public methods and marks them with an underscore - Adds JSDoc comments to the class - Adds setDocumentAndUrl to avoid having to handle that in `viewer.js` --- web/pdf_document_properties.js | 98 +++++++++++++++++++++++++--------- web/viewer.js | 4 +- 2 files changed, 73 insertions(+), 29 deletions(-) diff --git a/web/pdf_document_properties.js b/web/pdf_document_properties.js index c79c2fc3f..7767d9a00 100644 --- a/web/pdf_document_properties.js +++ b/web/pdf_document_properties.js @@ -18,6 +18,11 @@ 'use strict'; +/** + * @typedef {Object} PDFDocumentPropertiesOptions + * @property {string} overlayName - Name/identifier for the overlay + */ + /** * @class */ @@ -59,7 +64,56 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() { } PDFDocumentProperties.prototype = { - getProperties: function PDFDocumentProperties_getProperties() { + /** + * Open the document properties overlay. + */ + open: function PDFDocumentProperties_open() { + Promise.all([OverlayManager.open(this.overlayName), + this.dataAvailablePromise]).then(function () { + this._getProperties(); + }.bind(this)); + }, + + /** + * Close the document properties overlay. + */ + close: function PDFDocumentProperties_close() { + OverlayManager.close(this.overlayName); + }, + + /** + * Set the file size of the PDF document. This method is used to + * update the file size in the document properties overlay once it + * is known so we do not have to wait until the entire file is loaded. + * + * @param {number} fileSize - The file size of the PDF document. + */ + setFileSize: function PDFDocumentProperties_setFileSize(fileSize) { + if (fileSize > 0) { + this.rawFileSize = fileSize; + } + }, + + /** + * Set a reference to the PDF document and the URL in order + * to populate the overlay fields with the document properties. + * Note that the overlay will contain no information if this method + * is not called. + * + * @param {Object} pdfDocument - A reference to the PDF document. + * @param {string} url - The URL of the document. + */ + setDocumentAndUrl: + function PDFDocumentProperties_setDocumentAndUrl(pdfDocument, url) { + this.pdfDocument = pdfDocument; + this.url = url; + this.resolveDataAvailable(); + }, + + /** + * @private + */ + _getProperties: function PDFDocumentProperties_getProperties() { if (!OverlayManager.active) { // If the dialog was closed before dataAvailablePromise was resolved, // don't bother updating the properties. @@ -71,7 +125,7 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() { return; } this.setFileSize(data.length); - this.updateUI(this.fileSizeField, this.parseFileSize()); + this._updateUI(this.fileSizeField, this._parseFileSize()); }.bind(this)); // Get the document properties. @@ -79,15 +133,15 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() { var fields = [ { field: this.fileNameField, content: getPDFFileNameFromURL(this.url) }, - { field: this.fileSizeField, content: this.parseFileSize() }, + { 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) }, + content: this._parseDate(data.info.CreationDate) }, { field: this.modificationDateField, - content: this.parseDate(data.info.ModDate) }, + 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 }, @@ -97,24 +151,24 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() { // Show the properties in the dialog. for (var item in fields) { var element = fields[item]; - this.updateUI(element.field, element.content); + this._updateUI(element.field, element.content); } }.bind(this)); }, - updateUI: function PDFDocumentProperties_updateUI(field, content) { + /** + * @private + */ + _updateUI: function PDFDocumentProperties_updateUI(field, content) { if (field && content !== undefined && content !== '') { field.textContent = content; } }, - setFileSize: function PDFDocumentProperties_setFileSize(fileSize) { - if (fileSize > 0) { - this.rawFileSize = fileSize; - } - }, - - parseFileSize: function PDFDocumentProperties_parseFileSize() { + /** + * @private + */ + _parseFileSize: function PDFDocumentProperties_parseFileSize() { var fileSize = this.rawFileSize, kb = fileSize / 1024; if (!kb) { return; @@ -131,18 +185,10 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() { } }, - open: function PDFDocumentProperties_open() { - Promise.all([OverlayManager.open(this.overlayName), - this.dataAvailablePromise]).then(function () { - this.getProperties(); - }.bind(this)); - }, - - close: function PDFDocumentProperties_close() { - OverlayManager.close(this.overlayName); - }, - - parseDate: function PDFDocumentProperties_parseDate(inputDate) { + /** + * @private + */ + _parseDate: function PDFDocumentProperties_parseDate(inputDate) { // This is implemented according to the PDF specification, but note that // Adobe Reader doesn't handle changing the date to universal time // and doesn't use the user's time zone (they're effectively ignoring diff --git a/web/viewer.js b/web/viewer.js index 7b6f3e6f5..a842a5de1 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -856,9 +856,7 @@ var PDFViewerApplication = { this.pdfDocument = pdfDocument; - this.pdfDocumentProperties.url = this.url; - this.pdfDocumentProperties.pdfDocument = pdfDocument; - this.pdfDocumentProperties.resolveDataAvailable(); + this.pdfDocumentProperties.setDocumentAndUrl(pdfDocument, this.url); var downloadedPromise = pdfDocument.getDownloadInfo().then(function() { self.downloadComplete = true;