Merge pull request #5959 from timvandermeij/document-properties-class
Refactor document properties overlay
This commit is contained in:
		
						commit
						5c47a7f596
					
				| @ -1,199 +0,0 @@ | |||||||
| /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |  | ||||||
| /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ |  | ||||||
| /* Copyright 2012 Mozilla Foundation |  | ||||||
|  * |  | ||||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
|  * you may not use this file except in compliance with the License. |  | ||||||
|  * You may obtain a copy of the License at |  | ||||||
|  * |  | ||||||
|  *     http://www.apache.org/licenses/LICENSE-2.0
 |  | ||||||
|  * |  | ||||||
|  * Unless required by applicable law or agreed to in writing, software |  | ||||||
|  * distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
|  * See the License for the specific language governing permissions and |  | ||||||
|  * limitations under the License. |  | ||||||
|  */ |  | ||||||
| /* globals Promise, mozL10n, getPDFFileNameFromURL, OverlayManager */ |  | ||||||
| 
 |  | ||||||
| 'use strict'; |  | ||||||
| 
 |  | ||||||
| var DocumentProperties = { |  | ||||||
|   overlayName: null, |  | ||||||
|   rawFileSize: 0, |  | ||||||
| 
 |  | ||||||
|   // Document property fields (in the viewer).
 |  | ||||||
|   fileNameField: null, |  | ||||||
|   fileSizeField: null, |  | ||||||
|   titleField: null, |  | ||||||
|   authorField: null, |  | ||||||
|   subjectField: null, |  | ||||||
|   keywordsField: null, |  | ||||||
|   creationDateField: null, |  | ||||||
|   modificationDateField: null, |  | ||||||
|   creatorField: null, |  | ||||||
|   producerField: null, |  | ||||||
|   versionField: null, |  | ||||||
|   pageCountField: null, |  | ||||||
|   url: null, |  | ||||||
|   pdfDocument: null, |  | ||||||
| 
 |  | ||||||
|   initialize: function documentPropertiesInitialize(options) { |  | ||||||
|     this.overlayName = options.overlayName; |  | ||||||
| 
 |  | ||||||
|     // Set the document property fields.
 |  | ||||||
|     this.fileNameField = options.fileNameField; |  | ||||||
|     this.fileSizeField = options.fileSizeField; |  | ||||||
|     this.titleField = options.titleField; |  | ||||||
|     this.authorField = options.authorField; |  | ||||||
|     this.subjectField = options.subjectField; |  | ||||||
|     this.keywordsField = options.keywordsField; |  | ||||||
|     this.creationDateField = options.creationDateField; |  | ||||||
|     this.modificationDateField = options.modificationDateField; |  | ||||||
|     this.creatorField = options.creatorField; |  | ||||||
|     this.producerField = options.producerField; |  | ||||||
|     this.versionField = options.versionField; |  | ||||||
|     this.pageCountField = options.pageCountField; |  | ||||||
| 
 |  | ||||||
|     // Bind the event listener for the Close button.
 |  | ||||||
|     if (options.closeButton) { |  | ||||||
|       options.closeButton.addEventListener('click', this.close.bind(this)); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     this.dataAvailablePromise = new Promise(function (resolve) { |  | ||||||
|       this.resolveDataAvailable = resolve; |  | ||||||
|     }.bind(this)); |  | ||||||
| 
 |  | ||||||
|     OverlayManager.register(this.overlayName, this.close.bind(this)); |  | ||||||
|   }, |  | ||||||
| 
 |  | ||||||
|   getProperties: function documentPropertiesGetProperties() { |  | ||||||
|     if (!OverlayManager.active) { |  | ||||||
|       // If the dialog was closed before dataAvailablePromise was resolved,
 |  | ||||||
|       // don't bother updating the properties.
 |  | ||||||
|       return; |  | ||||||
|     } |  | ||||||
|     // Get the file size (if it hasn't already been set).
 |  | ||||||
|     this.pdfDocument.getDownloadInfo().then(function(data) { |  | ||||||
|       if (data.length === this.rawFileSize) { |  | ||||||
|         return; |  | ||||||
|       } |  | ||||||
|       this.setFileSize(data.length); |  | ||||||
|       this.updateUI(this.fileSizeField, 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 } |  | ||||||
|       ]; |  | ||||||
| 
 |  | ||||||
|       // Show the properties in the dialog.
 |  | ||||||
|       for (var item in fields) { |  | ||||||
|         var element = fields[item]; |  | ||||||
|         this.updateUI(element.field, element.content); |  | ||||||
|       } |  | ||||||
|     }.bind(this)); |  | ||||||
|   }, |  | ||||||
| 
 |  | ||||||
|   updateUI: function documentPropertiesUpdateUI(field, content) { |  | ||||||
|     if (field && content !== undefined && content !== '') { |  | ||||||
|       field.textContent = content; |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
| 
 |  | ||||||
|   setFileSize: function documentPropertiesSetFileSize(fileSize) { |  | ||||||
|     if (fileSize > 0) { |  | ||||||
|       this.rawFileSize = fileSize; |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
| 
 |  | ||||||
|   parseFileSize: function documentPropertiesParseFileSize() { |  | ||||||
|     var fileSize = this.rawFileSize, kb = fileSize / 1024; |  | ||||||
|     if (!kb) { |  | ||||||
|       return; |  | ||||||
|     } else if (kb < 1024) { |  | ||||||
|       return mozL10n.get('document_properties_kb', { |  | ||||||
|         size_kb: (+kb.toPrecision(3)).toLocaleString(), |  | ||||||
|         size_b: fileSize.toLocaleString() |  | ||||||
|       }, '{{size_kb}} KB ({{size_b}} bytes)'); |  | ||||||
|     } else { |  | ||||||
|       return mozL10n.get('document_properties_mb', { |  | ||||||
|         size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(), |  | ||||||
|         size_b: fileSize.toLocaleString() |  | ||||||
|       }, '{{size_mb}} MB ({{size_b}} bytes)'); |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
| 
 |  | ||||||
|   open: function documentPropertiesOpen() { |  | ||||||
|     Promise.all([OverlayManager.open(this.overlayName), |  | ||||||
|                  this.dataAvailablePromise]).then(function () { |  | ||||||
|       this.getProperties(); |  | ||||||
|     }.bind(this)); |  | ||||||
|   }, |  | ||||||
| 
 |  | ||||||
|   close: function documentPropertiesClose() { |  | ||||||
|     OverlayManager.close(this.overlayName); |  | ||||||
|   }, |  | ||||||
| 
 |  | ||||||
|   parseDate: function documentPropertiesParseDate(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
 |  | ||||||
|     // the HH' and mm' parts of the date string).
 |  | ||||||
|     var dateToParse = inputDate; |  | ||||||
|     if (dateToParse === undefined) { |  | ||||||
|       return ''; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // Remove the D: prefix if it is available.
 |  | ||||||
|     if (dateToParse.substring(0,2) === 'D:') { |  | ||||||
|       dateToParse = dateToParse.substring(2); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // Get all elements from the PDF date string.
 |  | ||||||
|     // JavaScript's Date object expects the month to be between
 |  | ||||||
|     // 0 and 11 instead of 1 and 12, so we're correcting for this.
 |  | ||||||
|     var year = parseInt(dateToParse.substring(0,4), 10); |  | ||||||
|     var month = parseInt(dateToParse.substring(4,6), 10) - 1; |  | ||||||
|     var day = parseInt(dateToParse.substring(6,8), 10); |  | ||||||
|     var hours = parseInt(dateToParse.substring(8,10), 10); |  | ||||||
|     var minutes = parseInt(dateToParse.substring(10,12), 10); |  | ||||||
|     var seconds = parseInt(dateToParse.substring(12,14), 10); |  | ||||||
|     var utRel = dateToParse.substring(14,15); |  | ||||||
|     var offsetHours = parseInt(dateToParse.substring(15,17), 10); |  | ||||||
|     var offsetMinutes = parseInt(dateToParse.substring(18,20), 10); |  | ||||||
| 
 |  | ||||||
|     // As per spec, utRel = 'Z' means equal to universal time.
 |  | ||||||
|     // The other cases ('-' and '+') have to be handled here.
 |  | ||||||
|     if (utRel === '-') { |  | ||||||
|       hours += offsetHours; |  | ||||||
|       minutes += offsetMinutes; |  | ||||||
|     } else if (utRel === '+') { |  | ||||||
|       hours -= offsetHours; |  | ||||||
|       minutes -= offsetMinutes; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // Return the new date format from the user's locale.
 |  | ||||||
|     var date = new Date(Date.UTC(year, month, day, hours, minutes, seconds)); |  | ||||||
|     var dateString = date.toLocaleDateString(); |  | ||||||
|     var timeString = date.toLocaleTimeString(); |  | ||||||
|     return mozL10n.get('document_properties_date_string', |  | ||||||
|                        {date: dateString, time: timeString}, |  | ||||||
|                        '{{date}}, {{time}}'); |  | ||||||
|   } |  | ||||||
| }; |  | ||||||
							
								
								
									
										226
									
								
								web/pdf_document_properties.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										226
									
								
								web/pdf_document_properties.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,226 @@ | |||||||
|  | /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ | ||||||
|  | /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ | ||||||
|  | /* Copyright 2012 Mozilla Foundation | ||||||
|  |  * | ||||||
|  |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * | ||||||
|  |  *     http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  |  * | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  | /* globals Promise, mozL10n, getPDFFileNameFromURL, OverlayManager */ | ||||||
|  | 
 | ||||||
|  | 'use strict'; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @typedef {Object} PDFDocumentPropertiesOptions | ||||||
|  |  * @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. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @class | ||||||
|  |  */ | ||||||
|  | var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() { | ||||||
|  |   /** | ||||||
|  |    * @constructs PDFDocumentProperties | ||||||
|  |    * @param {PDFDocumentPropertiesOptions} options | ||||||
|  |    */ | ||||||
|  |   function PDFDocumentProperties(options) { | ||||||
|  |     this.fields = options.fields; | ||||||
|  |     this.overlayName = options.overlayName; | ||||||
|  | 
 | ||||||
|  |     this.rawFileSize = 0; | ||||||
|  |     this.url = null; | ||||||
|  |     this.pdfDocument = null; | ||||||
|  | 
 | ||||||
|  |     // Bind the event listener for the Close button.
 | ||||||
|  |     if (options.closeButton) { | ||||||
|  |       options.closeButton.addEventListener('click', this.close.bind(this)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     this.dataAvailablePromise = new Promise(function (resolve) { | ||||||
|  |       this.resolveDataAvailable = resolve; | ||||||
|  |     }.bind(this)); | ||||||
|  | 
 | ||||||
|  |     OverlayManager.register(this.overlayName, this.close.bind(this)); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   PDFDocumentProperties.prototype = { | ||||||
|  |     /** | ||||||
|  |      * 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.
 | ||||||
|  |         return; | ||||||
|  |       } | ||||||
|  |       // Get the file size (if it hasn't already been set).
 | ||||||
|  |       this.pdfDocument.getDownloadInfo().then(function(data) { | ||||||
|  |         if (data.length === this.rawFileSize) { | ||||||
|  |           return; | ||||||
|  |         } | ||||||
|  |         this.setFileSize(data.length); | ||||||
|  |         this._updateUI(this.fields['fileSize'], this._parseFileSize()); | ||||||
|  |       }.bind(this)); | ||||||
|  | 
 | ||||||
|  |       // Get the document properties.
 | ||||||
|  |       this.pdfDocument.getMetadata().then(function(data) { | ||||||
|  |         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 identifier in content) { | ||||||
|  |           this._updateUI(this.fields[identifier], content[identifier]); | ||||||
|  |         } | ||||||
|  |       }.bind(this)); | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * @private | ||||||
|  |      */ | ||||||
|  |     _updateUI: function PDFDocumentProperties_updateUI(field, content) { | ||||||
|  |       if (field && content !== undefined && content !== '') { | ||||||
|  |         field.textContent = content; | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * @private | ||||||
|  |      */ | ||||||
|  |     _parseFileSize: function PDFDocumentProperties_parseFileSize() { | ||||||
|  |       var fileSize = this.rawFileSize, kb = fileSize / 1024; | ||||||
|  |       if (!kb) { | ||||||
|  |         return; | ||||||
|  |       } else if (kb < 1024) { | ||||||
|  |         return mozL10n.get('document_properties_kb', { | ||||||
|  |           size_kb: (+kb.toPrecision(3)).toLocaleString(), | ||||||
|  |           size_b: fileSize.toLocaleString() | ||||||
|  |         }, '{{size_kb}} KB ({{size_b}} bytes)'); | ||||||
|  |       } else { | ||||||
|  |         return mozL10n.get('document_properties_mb', { | ||||||
|  |           size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(), | ||||||
|  |           size_b: fileSize.toLocaleString() | ||||||
|  |         }, '{{size_mb}} MB ({{size_b}} bytes)'); | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * @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
 | ||||||
|  |       // the HH' and mm' parts of the date string).
 | ||||||
|  |       var dateToParse = inputDate; | ||||||
|  |       if (dateToParse === undefined) { | ||||||
|  |         return ''; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       // Remove the D: prefix if it is available.
 | ||||||
|  |       if (dateToParse.substring(0,2) === 'D:') { | ||||||
|  |         dateToParse = dateToParse.substring(2); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       // Get all elements from the PDF date string.
 | ||||||
|  |       // JavaScript's Date object expects the month to be between
 | ||||||
|  |       // 0 and 11 instead of 1 and 12, so we're correcting for this.
 | ||||||
|  |       var year = parseInt(dateToParse.substring(0,4), 10); | ||||||
|  |       var month = parseInt(dateToParse.substring(4,6), 10) - 1; | ||||||
|  |       var day = parseInt(dateToParse.substring(6,8), 10); | ||||||
|  |       var hours = parseInt(dateToParse.substring(8,10), 10); | ||||||
|  |       var minutes = parseInt(dateToParse.substring(10,12), 10); | ||||||
|  |       var seconds = parseInt(dateToParse.substring(12,14), 10); | ||||||
|  |       var utRel = dateToParse.substring(14,15); | ||||||
|  |       var offsetHours = parseInt(dateToParse.substring(15,17), 10); | ||||||
|  |       var offsetMinutes = parseInt(dateToParse.substring(18,20), 10); | ||||||
|  | 
 | ||||||
|  |       // As per spec, utRel = 'Z' means equal to universal time.
 | ||||||
|  |       // The other cases ('-' and '+') have to be handled here.
 | ||||||
|  |       if (utRel === '-') { | ||||||
|  |         hours += offsetHours; | ||||||
|  |         minutes += offsetMinutes; | ||||||
|  |       } else if (utRel === '+') { | ||||||
|  |         hours -= offsetHours; | ||||||
|  |         minutes -= offsetMinutes; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       // Return the new date format from the user's locale.
 | ||||||
|  |       var date = new Date(Date.UTC(year, month, day, hours, minutes, seconds)); | ||||||
|  |       var dateString = date.toLocaleDateString(); | ||||||
|  |       var timeString = date.toLocaleTimeString(); | ||||||
|  |       return mozL10n.get('document_properties_date_string', | ||||||
|  |                          {date: dateString, time: timeString}, | ||||||
|  |                          '{{date}}, {{time}}'); | ||||||
|  |     } | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   return PDFDocumentProperties; | ||||||
|  | })(); | ||||||
| @ -25,7 +25,6 @@ var SecondaryToolbar = { | |||||||
| 
 | 
 | ||||||
|   initialize: function secondaryToolbarInitialize(options) { |   initialize: function secondaryToolbarInitialize(options) { | ||||||
|     this.toolbar = options.toolbar; |     this.toolbar = options.toolbar; | ||||||
|     this.documentProperties = options.documentProperties; |  | ||||||
|     this.buttonContainer = this.toolbar.firstElementChild; |     this.buttonContainer = this.toolbar.firstElementChild; | ||||||
| 
 | 
 | ||||||
|     // Define the toolbar buttons.
 |     // Define the toolbar buttons.
 | ||||||
| @ -115,7 +114,7 @@ var SecondaryToolbar = { | |||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
|   documentPropertiesClick: function secondaryToolbarDocumentPropsClick(evt) { |   documentPropertiesClick: function secondaryToolbarDocumentPropsClick(evt) { | ||||||
|     this.documentProperties.open(); |     PDFViewerApplication.pdfDocumentProperties.open(); | ||||||
|     this.close(); |     this.close(); | ||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -86,7 +86,7 @@ http://sourceforge.net/adobe/cmap/wiki/License/ | |||||||
|     <script src="hand_tool.js"></script> |     <script src="hand_tool.js"></script> | ||||||
|     <script src="overlay_manager.js"></script> |     <script src="overlay_manager.js"></script> | ||||||
|     <script src="password_prompt.js"></script> |     <script src="password_prompt.js"></script> | ||||||
|     <script src="document_properties.js"></script> |     <script src="pdf_document_properties.js"></script> | ||||||
| <!--#endif--> | <!--#endif--> | ||||||
| 
 | 
 | ||||||
| <!--#if !MINIFIED --> | <!--#if !MINIFIED --> | ||||||
|  | |||||||
| @ -19,7 +19,7 @@ | |||||||
|            PDFHistory, Preferences, SidebarView, ViewHistory, Stats, |            PDFHistory, Preferences, SidebarView, ViewHistory, Stats, | ||||||
|            PDFThumbnailViewer, URL, noContextMenuHandler, SecondaryToolbar, |            PDFThumbnailViewer, URL, noContextMenuHandler, SecondaryToolbar, | ||||||
|            PasswordPrompt, PDFPresentationMode, HandTool, Promise, |            PasswordPrompt, PDFPresentationMode, HandTool, Promise, | ||||||
|            DocumentProperties, PDFOutlineView, PDFAttachmentView, |            PDFDocumentProperties, PDFOutlineView, PDFAttachmentView, | ||||||
|            OverlayManager, PDFFindController, PDFFindBar, getVisibleElements, |            OverlayManager, PDFFindController, PDFFindBar, getVisibleElements, | ||||||
|            watchScroll, PDFViewer, PDFRenderingQueue, PresentationModeState, |            watchScroll, PDFViewer, PDFRenderingQueue, PresentationModeState, | ||||||
|            RenderingStates, DEFAULT_SCALE, UNKNOWN_SCALE, |            RenderingStates, DEFAULT_SCALE, UNKNOWN_SCALE, | ||||||
| @ -88,7 +88,7 @@ var mozL10n = document.mozL10n || document.webL10n; | |||||||
| //#include hand_tool.js
 | //#include hand_tool.js
 | ||||||
| //#include overlay_manager.js
 | //#include overlay_manager.js
 | ||||||
| //#include password_prompt.js
 | //#include password_prompt.js
 | ||||||
| //#include document_properties.js
 | //#include pdf_document_properties.js
 | ||||||
| //#include pdf_viewer.js
 | //#include pdf_viewer.js
 | ||||||
| //#include pdf_thumbnail_viewer.js
 | //#include pdf_thumbnail_viewer.js
 | ||||||
| //#include pdf_outline_view.js
 | //#include pdf_outline_view.js
 | ||||||
| @ -109,6 +109,8 @@ var PDFViewerApplication = { | |||||||
|   pdfRenderingQueue: null, |   pdfRenderingQueue: null, | ||||||
|   /** @type {PDFPresentationMode} */ |   /** @type {PDFPresentationMode} */ | ||||||
|   pdfPresentationMode: null, |   pdfPresentationMode: null, | ||||||
|  |   /** @type {PDFDocumentProperties} */ | ||||||
|  |   pdfDocumentProperties: null, | ||||||
|   pageRotation: 0, |   pageRotation: 0, | ||||||
|   updateScaleControls: true, |   updateScaleControls: true, | ||||||
|   isInitialViewSet: false, |   isInitialViewSet: false, | ||||||
| @ -172,6 +174,25 @@ var PDFViewerApplication = { | |||||||
|       toggleHandTool: document.getElementById('toggleHandTool') |       toggleHandTool: document.getElementById('toggleHandTool') | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|  |     this.pdfDocumentProperties = new PDFDocumentProperties({ | ||||||
|  |       overlayName: 'documentPropertiesOverlay', | ||||||
|  |       closeButton: document.getElementById('documentPropertiesClose'), | ||||||
|  |       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({ |     SecondaryToolbar.initialize({ | ||||||
|       toolbar: document.getElementById('secondaryToolbar'), |       toolbar: document.getElementById('secondaryToolbar'), | ||||||
|       toggleButton: document.getElementById('secondaryToolbarToggle'), |       toggleButton: document.getElementById('secondaryToolbarToggle'), | ||||||
| @ -185,7 +206,6 @@ var PDFViewerApplication = { | |||||||
|       lastPage: document.getElementById('lastPage'), |       lastPage: document.getElementById('lastPage'), | ||||||
|       pageRotateCw: document.getElementById('pageRotateCw'), |       pageRotateCw: document.getElementById('pageRotateCw'), | ||||||
|       pageRotateCcw: document.getElementById('pageRotateCcw'), |       pageRotateCcw: document.getElementById('pageRotateCcw'), | ||||||
|       documentProperties: DocumentProperties, |  | ||||||
|       documentPropertiesButton: document.getElementById('documentProperties') |       documentPropertiesButton: document.getElementById('documentProperties') | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
| @ -216,23 +236,6 @@ var PDFViewerApplication = { | |||||||
|       passwordCancel: document.getElementById('passwordCancel') |       passwordCancel: document.getElementById('passwordCancel') | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     DocumentProperties.initialize({ |  | ||||||
|       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') |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     var self = this; |     var self = this; | ||||||
|     var initializedPromise = Promise.all([ |     var initializedPromise = Promise.all([ | ||||||
|       Preferences.get('enableWebGL').then(function resolved(value) { |       Preferences.get('enableWebGL').then(function resolved(value) { | ||||||
| @ -410,7 +413,8 @@ var PDFViewerApplication = { | |||||||
|                                     pdfDataRangeTransport); |                                     pdfDataRangeTransport); | ||||||
| 
 | 
 | ||||||
|           if (args.length) { |           if (args.length) { | ||||||
|             DocumentProperties.setFileSize(args.length); |             PDFViewerApplication.pdfDocumentProperties | ||||||
|  |                                 .setFileSize(args.length); | ||||||
|           } |           } | ||||||
|           break; |           break; | ||||||
|         case 'range': |         case 'range': | ||||||
| @ -556,7 +560,7 @@ var PDFViewerApplication = { | |||||||
|     ); |     ); | ||||||
| 
 | 
 | ||||||
|     if (args && args.length) { |     if (args && args.length) { | ||||||
|       DocumentProperties.setFileSize(args.length); |       PDFViewerApplication.pdfDocumentProperties.setFileSize(args.length); | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
| @ -853,9 +857,7 @@ var PDFViewerApplication = { | |||||||
| 
 | 
 | ||||||
|     this.pdfDocument = pdfDocument; |     this.pdfDocument = pdfDocument; | ||||||
| 
 | 
 | ||||||
|     DocumentProperties.url = this.url; |     this.pdfDocumentProperties.setDocumentAndUrl(pdfDocument, this.url); | ||||||
|     DocumentProperties.pdfDocument = pdfDocument; |  | ||||||
|     DocumentProperties.resolveDataAvailable(); |  | ||||||
| 
 | 
 | ||||||
|     var downloadedPromise = pdfDocument.getDownloadInfo().then(function() { |     var downloadedPromise = pdfDocument.getDownloadInfo().then(function() { | ||||||
|       self.downloadComplete = true; |       self.downloadComplete = true; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user