/ * *
* @ licstart The following is the entire license notice for the
* Javascript code in this page
*
* Copyright 2017 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 .
*
* @ licend The above is the entire license notice for the
* Javascript code in this page
* /
'use strict' ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . PDFDocumentProperties = undefined ;
var _slicedToArray = function ( ) { function sliceIterator ( arr , i ) { var _arr = [ ] ; var _n = true ; var _d = false ; var _e = undefined ; try { for ( var _i = arr [ Symbol . iterator ] ( ) , _s ; ! ( _n = ( _s = _i . next ( ) ) . done ) ; _n = true ) { _arr . push ( _s . value ) ; if ( i && _arr . length === i ) break ; } } catch ( err ) { _d = true ; _e = err ; } finally { try { if ( ! _n && _i [ "return" ] ) _i [ "return" ] ( ) ; } finally { if ( _d ) throw _e ; } } return _arr ; } return function ( arr , i ) { if ( Array . isArray ( arr ) ) { return arr ; } else if ( Symbol . iterator in Object ( arr ) ) { return sliceIterator ( arr , i ) ; } else { throw new TypeError ( "Invalid attempt to destructure non-iterable instance" ) ; } } ; } ( ) ;
var _createClass = function ( ) { function defineProperties ( target , props ) { for ( var i = 0 ; i < props . length ; i ++ ) { var descriptor = props [ i ] ; descriptor . enumerable = descriptor . enumerable || false ; descriptor . configurable = true ; if ( "value" in descriptor ) descriptor . writable = true ; Object . defineProperty ( target , descriptor . key , descriptor ) ; } } return function ( Constructor , protoProps , staticProps ) { if ( protoProps ) defineProperties ( Constructor . prototype , protoProps ) ; if ( staticProps ) defineProperties ( Constructor , staticProps ) ; return Constructor ; } ; } ( ) ;
var _ui _utils = require ( './ui_utils' ) ;
var _pdf = require ( '../pdf' ) ;
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
var DEFAULT _FIELD _CONTENT = '-' ;
var PDFDocumentProperties = function ( ) {
function PDFDocumentProperties ( _ref , overlayManager ) {
var overlayName = _ref . overlayName ,
fields = _ref . fields ,
container = _ref . container ,
closeButton = _ref . closeButton ;
var l10n = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : _ui _utils . NullL10n ;
_classCallCheck ( this , PDFDocumentProperties ) ;
this . overlayName = overlayName ;
this . fields = fields ;
this . container = container ;
this . overlayManager = overlayManager ;
this . l10n = l10n ;
this . _reset ( ) ;
if ( closeButton ) {
closeButton . addEventListener ( 'click' , this . close . bind ( this ) ) ;
}
this . overlayManager . register ( this . overlayName , this . container , this . close . bind ( this ) ) ;
}
_createClass ( PDFDocumentProperties , [ {
key : 'open' ,
value : function open ( ) {
var _this = this ;
var freezeFieldData = function freezeFieldData ( data ) {
Object . defineProperty ( _this , 'fieldData' , {
value : Object . freeze ( data ) ,
writable : false ,
enumerable : true ,
configurable : true
} ) ;
} ;
Promise . all ( [ this . overlayManager . open ( this . overlayName ) , this . _dataAvailableCapability . promise ] ) . then ( function ( ) {
if ( _this . fieldData ) {
_this . _updateUI ( ) ;
return ;
}
_this . pdfDocument . getMetadata ( ) . then ( function ( _ref2 ) {
var info = _ref2 . info ,
metadata = _ref2 . metadata ,
contentDispositionFilename = _ref2 . contentDispositionFilename ;
return Promise . all ( [ info , metadata , contentDispositionFilename || ( 0 , _ui _utils . getPDFFileNameFromURL ) ( _this . url ) , _this . _parseFileSize ( _this . maybeFileSize ) , _this . _parseDate ( info . CreationDate ) , _this . _parseDate ( info . ModDate ) , _this . pdfDocument . getPageSizeInches ( ) . then ( function ( pageSizeInches ) {
return _this . _parsePageSize ( pageSizeInches ) ;
} ) ] ) ;
} ) . then ( function ( _ref3 ) {
var _ref4 = _slicedToArray ( _ref3 , 7 ) ,
info = _ref4 [ 0 ] ,
metadata = _ref4 [ 1 ] ,
fileName = _ref4 [ 2 ] ,
fileSize = _ref4 [ 3 ] ,
creationDate = _ref4 [ 4 ] ,
modDate = _ref4 [ 5 ] ,
pageSize = _ref4 [ 6 ] ;
freezeFieldData ( {
'fileName' : fileName ,
'fileSize' : fileSize ,
'title' : info . Title ,
'author' : info . Author ,
'subject' : info . Subject ,
'keywords' : info . Keywords ,
'creationDate' : creationDate ,
'modificationDate' : modDate ,
'creator' : info . Creator ,
'producer' : info . Producer ,
'version' : info . PDFFormatVersion ,
'pageCount' : _this . pdfDocument . numPages ,
'pageSizeInch' : pageSize . inch ,
'pageSizeMM' : pageSize . mm
} ) ;
_this . _updateUI ( ) ;
return _this . pdfDocument . getDownloadInfo ( ) ;
} ) . then ( function ( _ref5 ) {
var length = _ref5 . length ;
return _this . _parseFileSize ( length ) ;
} ) . then ( function ( fileSize ) {
var data = ( 0 , _ui _utils . cloneObj ) ( _this . fieldData ) ;
data [ 'fileSize' ] = fileSize ;
freezeFieldData ( data ) ;
_this . _updateUI ( ) ;
} ) ;
} ) ;
}
} , {
key : 'close' ,
value : function close ( ) {
this . overlayManager . close ( this . overlayName ) ;
}
} , {
key : 'setDocument' ,
value : function setDocument ( pdfDocument , url ) {
if ( this . pdfDocument ) {
this . _reset ( ) ;
this . _updateUI ( true ) ;
}
if ( ! pdfDocument ) {
return ;
}
this . pdfDocument = pdfDocument ;
this . url = url ;
this . _dataAvailableCapability . resolve ( ) ;
}
} , {
key : 'setFileSize' ,
value : function setFileSize ( fileSize ) {
if ( typeof fileSize === 'number' && fileSize > 0 ) {
this . maybeFileSize = fileSize ;
}
}
} , {
key : '_reset' ,
value : function _reset ( ) {
this . pdfDocument = null ;
this . url = null ;
this . maybeFileSize = 0 ;
delete this . fieldData ;
this . _dataAvailableCapability = ( 0 , _pdf . createPromiseCapability ) ( ) ;
}
} , {
key : '_updateUI' ,
value : function _updateUI ( ) {
var reset = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : false ;
if ( reset || ! this . fieldData ) {
for ( var id in this . fields ) {
this . fields [ id ] . textContent = DEFAULT _FIELD _CONTENT ;
}
return ;
}
if ( this . overlayManager . active !== this . overlayName ) {
return ;
}
for ( var _id in this . fields ) {
var content = this . fieldData [ _id ] ;
this . fields [ _id ] . textContent = content || content === 0 ? content : DEFAULT _FIELD _CONTENT ;
}
}
} , {
key : '_parseFileSize' ,
value : function _parseFileSize ( ) {
var fileSize = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : 0 ;
var kb = fileSize / 1024 ;
if ( ! kb ) {
return Promise . resolve ( undefined ) ;
} else if ( kb < 1024 ) {
return this . l10n . get ( 'document_properties_kb' , {
size _kb : ( + kb . toPrecision ( 3 ) ) . toLocaleString ( ) ,
size _b : fileSize . toLocaleString ( )
} , '{{size_kb}} KB ({{size_b}} bytes)' ) ;
}
return this . l10n . get ( 'document_properties_mb' , {
size _mb : ( + ( kb / 1024 ) . toPrecision ( 3 ) ) . toLocaleString ( ) ,
size _b : fileSize . toLocaleString ( )
} , '{{size_mb}} MB ({{size_b}} bytes)' ) ;
}
} , {
key : '_parsePageSize' ,
value : function _parsePageSize ( pageSizeInches ) {
if ( ! pageSizeInches ) {
return Promise . resolve ( [ undefined , undefined ] ) ;
}
var sizes _two _units = {
'width_in' : Math . round ( pageSizeInches . width * 100 ) / 100 ,
'height_in' : Math . round ( pageSizeInches . height * 100 ) / 100 ,
'width_mm' : Math . round ( pageSizeInches . width * 25.4 * 10 ) / 10 ,
'height_mm' : Math . round ( pageSizeInches . height * 25.4 * 10 ) / 10
} ;
return Promise . all ( [ this . l10n . get ( 'document_properties_page_size_in' , sizes _two _units , '{{width_in}} in × {{height_in}} in' ) , this . l10n . get ( 'document_properties_page_size_mm' , sizes _two _units , '{{width_mm}} mm × {{height_mm}} mm' ) ] ) . then ( function ( _ref6 ) {
var _ref7 = _slicedToArray ( _ref6 , 2 ) ,
parsedPageSizeInches = _ref7 [ 0 ] ,
parsedPageSizeMM = _ref7 [ 1 ] ;
return Promise . resolve ( {
inch : parsedPageSizeInches ,
mm : parsedPageSizeMM
} ) ;
} ) ;
}
} , {
key : '_parseDate' ,
value : function _parseDate ( inputDate ) {
if ( ! inputDate ) {
return ;
}
var dateToParse = inputDate ;
if ( dateToParse . substring ( 0 , 2 ) === 'D:' ) {
dateToParse = dateToParse . substring ( 2 ) ;
}
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 ) ;
if ( utRel === '-' ) {
hours += offsetHours ;
minutes += offsetMinutes ;
} else if ( utRel === '+' ) {
hours -= offsetHours ;
minutes -= offsetMinutes ;
}
var date = new Date ( Date . UTC ( year , month , day , hours , minutes , seconds ) ) ;
var dateString = date . toLocaleDateString ( ) ;
var timeString = date . toLocaleTimeString ( ) ;
return this . l10n . get ( 'document_properties_date_string' , {
date : dateString ,
time : timeString
} , '{{date}}, {{time}}' ) ;
}
} ] ) ;
return PDFDocumentProperties ;
} ( ) ;
exports . PDFDocumentProperties = PDFDocumentProperties ;