11/** @preserve
22 * jsPDF - PDF Document creation from JavaScript
3- * Version 1.0.198 -git Built on 2014-07-17T20:58
4- * CommitID 8fb976ef54
3+ * Version 1.0.203 -git Built on 2014-07-22T04:20
4+ * CommitID ed1c917abb
55 *
66 * Copyright (c) 2010-2014 James Hall, https://github.com/MrRio/jsPDF
77 * 2010 Aaron Spike, https://github.com/acspike
@@ -407,18 +407,17 @@ var jsPDF = (function(global) {
407407 }
408408 events . publish ( 'addFonts' , { fonts : fonts , dictionary : fontmap } ) ;
409409 } ,
410- SAFE = function ( fn ) {
411- fn . foo = function ( ) {
410+ SAFE = function __safeCall ( fn ) {
411+ fn . foo = function __safeCallWrapper ( ) {
412412 try {
413413 return fn . apply ( this , arguments ) ;
414414 } catch ( e ) {
415415 var stack = e . stack || '' ;
416416 if ( ~ stack . indexOf ( ' at ' ) ) stack = stack . split ( " at " ) [ 1 ] ;
417417 var m = "Error in function " + stack . split ( "\n" ) [ 0 ] . split ( '<' ) [ 0 ] + ": " + e . message ;
418418 if ( global . console ) {
419- console . log ( m , e ) ;
419+ global . console . error ( m , e ) ;
420420 if ( global . alert ) alert ( m ) ;
421- console . trace ( ) ;
422421 } else {
423422 throw new Error ( m ) ;
424423 }
@@ -752,6 +751,9 @@ var jsPDF = (function(global) {
752751 * @name output
753752 */
754753 output = SAFE ( function ( type , options ) {
754+ var datauri = ( '' + type ) . substr ( 0 , 6 ) === 'dataur'
755+ ? 'data:application/pdf;base64,' + btoa ( buildDocument ( ) ) :0 ;
756+
755757 switch ( type ) {
756758 case undefined :
757759 return buildDocument ( ) ;
@@ -765,24 +767,28 @@ var jsPDF = (function(global) {
765767 saveAs ( getBlob ( ) , options ) ;
766768 if ( typeof saveAs . unload === 'function' ) {
767769 if ( global . setTimeout ) {
768- setTimeout ( saveAs . unload , 70 ) ;
770+ setTimeout ( saveAs . unload , 911 ) ;
769771 }
770772 }
771773 break ;
772774 case 'arraybuffer' :
773775 return getArrayBuffer ( ) ;
774776 case 'blob' :
775777 return getBlob ( ) ;
778+ case 'bloburi' :
779+ case 'bloburl' :
780+ // User is responsible of calling revokeObjectURL
781+ return global . URL && global . URL . createObjectURL ( getBlob ( ) ) || void 0 ;
776782 case 'datauristring' :
777783 case 'dataurlstring' :
778- return 'data:application/pdf;base64,' + btoa ( buildDocument ( ) ) ;
784+ return datauri ;
785+ case 'dataurlnewwindow' :
786+ var nW = global . open ( datauri ) ;
787+ if ( nW || typeof safari === "undefined" ) return nW ;
788+ /* pass through */
779789 case 'datauri' :
780790 case 'dataurl' :
781- global . document . location . href = 'data:application/pdf;base64,' + btoa ( buildDocument ( ) ) ;
782- break ;
783- case 'dataurlnewwindow' :
784- global . open ( 'data:application/pdf;base64,' + btoa ( buildDocument ( ) ) ) ;
785- break ;
791+ return global . document . location . href = datauri ;
786792 default :
787793 throw new Error ( 'Output type "' + type + '" is not supported.' ) ;
788794 }
@@ -1697,7 +1703,7 @@ var jsPDF = (function(global) {
16971703 * pdfdoc.mymethod() // <- !!!!!!
16981704 */
16991705 jsPDF . API = { events :[ ] } ;
1700- jsPDF . version = "1.0.198 -debug 2014-07-17T20:58 :diegocr" ;
1706+ jsPDF . version = "1.0.203 -debug 2014-07-22T04:20 :diegocr" ;
17011707
17021708 if ( typeof define === 'function' && define . amd ) {
17031709 define ( 'jsPDF' , function ( ) {
@@ -2337,10 +2343,10 @@ var jsPDF = (function(global) {
23372343
23382344 } else {
23392345
2340- if ( imgData . charCodeAt ( 0 ) === 0x89 &&
2341- imgData . charCodeAt ( 1 ) === 0x50 &&
2342- imgData . charCodeAt ( 2 ) === 0x4e &&
2343- imgData . charCodeAt ( 3 ) === 0x47 ) format = 'png' ;
2346+ if ( imageData . charCodeAt ( 0 ) === 0x89 &&
2347+ imageData . charCodeAt ( 1 ) === 0x50 &&
2348+ imageData . charCodeAt ( 2 ) === 0x4e &&
2349+ imageData . charCodeAt ( 3 ) === 0x47 ) format = 'png' ;
23442350 }
23452351 }
23462352 format = ( format || 'JPEG' ) . toLowerCase ( ) ;
@@ -5588,7 +5594,7 @@ jsPDFAPI.putTotalPages = function(pageExpression) {
55885594} ( typeof self !== "undefined" && self || typeof window !== "undefined" && window || this . content || this ) ) ;
55895595/* FileSaver.js
55905596 * A saveAs() FileSaver implementation.
5591- * 2014-05-27
5597+ * 2014-07-21
55925598 *
55935599 * By Eli Grey, http://eligrey.com
55945600 * License: X11/MIT
@@ -5637,18 +5643,17 @@ var saveAs = saveAs
56375643 }
56385644 , force_saveable_type = "application/octet-stream"
56395645 , fs_min_size = 0
5640- , deletion_queue = [ ]
5641- , process_deletion_queue = function ( ) {
5642- var i = deletion_queue . length ;
5643- while ( i -- ) {
5644- var file = deletion_queue [ i ] ;
5646+ // See https://code.google.com/p/chromium/issues/detail?id=375297#c7 for
5647+ // the reasoning behind the timeout and revocation flow
5648+ , arbitrary_revoke_timeout = 10
5649+ , revoke = function ( file ) {
5650+ setTimeout ( function ( ) {
56455651 if ( typeof file === "string" ) { // file is an object URL
56465652 get_URL ( ) . revokeObjectURL ( file ) ;
56475653 } else { // file is a File
56485654 file . remove ( ) ;
56495655 }
5650- }
5651- deletion_queue . length = 0 ; // clear queue
5656+ } , arbitrary_revoke_timeout ) ;
56525657 }
56535658 , dispatch = function ( filesaver , event_types , event ) {
56545659 event_types = [ ] . concat ( event_types ) ;
@@ -5672,27 +5677,23 @@ var saveAs = saveAs
56725677 , blob_changed = false
56735678 , object_url
56745679 , target_view
5675- , get_object_url = function ( ) {
5676- var object_url = get_URL ( ) . createObjectURL ( blob ) ;
5677- deletion_queue . push ( object_url ) ;
5678- return object_url ;
5679- }
56805680 , dispatch_all = function ( ) {
56815681 dispatch ( filesaver , "writestart progress write writeend" . split ( " " ) ) ;
56825682 }
56835683 // on any filesys errors revert to saving with object URLs
56845684 , fs_error = function ( ) {
56855685 // don't create more object URLs than needed
56865686 if ( blob_changed || ! object_url ) {
5687- object_url = get_object_url ( blob ) ;
5687+ object_url = get_URL ( ) . createObjectURL ( blob ) ;
56885688 }
56895689 if ( target_view ) {
56905690 target_view . location . href = object_url ;
56915691 } else {
5692- window . open ( object_url , "_blank" ) ;
5692+ view . open ( object_url , "_blank" ) ;
56935693 }
56945694 filesaver . readyState = filesaver . DONE ;
56955695 dispatch_all ( ) ;
5696+ revoke ( object_url ) ;
56965697 }
56975698 , abortable = function ( func ) {
56985699 return function ( ) {
@@ -5709,17 +5710,20 @@ var saveAs = saveAs
57095710 name = "download" ;
57105711 }
57115712 if ( can_use_save_link ) {
5712- object_url = get_object_url ( blob ) ;
5713+ object_url = get_URL ( ) . createObjectURL ( blob ) ;
57135714 save_link . href = object_url ;
57145715 save_link . download = name ;
57155716 click ( save_link ) ;
57165717 filesaver . readyState = filesaver . DONE ;
57175718 dispatch_all ( ) ;
5719+ revoke ( object_url ) ;
57185720 return ;
57195721 }
57205722 // Object and web filesystem URLs have a problem saving in Google Chrome when
57215723 // viewed in a tab, so I force save with application/octet-stream
57225724 // http://code.google.com/p/chromium/issues/detail?id=91158
5725+ // Update: Google errantly closed 91158, I submitted it again:
5726+ // https://code.google.com/p/chromium/issues/detail?id=389642
57235727 if ( view . chrome && type && type !== force_saveable_type ) {
57245728 slice = blob . slice || blob . webkitSlice ;
57255729 blob = slice . call ( blob , 0 , blob . size , force_saveable_type ) ;
@@ -5746,9 +5750,9 @@ var saveAs = saveAs
57465750 file . createWriter ( abortable ( function ( writer ) {
57475751 writer . onwriteend = function ( event ) {
57485752 target_view . location . href = file . toURL ( ) ;
5749- deletion_queue . push ( file ) ;
57505753 filesaver . readyState = filesaver . DONE ;
57515754 dispatch ( filesaver , "writeend" , event ) ;
5755+ revoke ( file ) ;
57525756 } ;
57535757 writer . onerror = function ( ) {
57545758 var error = writer . error ;
@@ -5805,11 +5809,6 @@ var saveAs = saveAs
58055809 FS_proto . onwriteend =
58065810 null ;
58075811
5808- view . addEventListener ( "unload" , process_deletion_queue , false ) ;
5809- saveAs . unload = function ( ) {
5810- process_deletion_queue ( ) ;
5811- view . removeEventListener ( "unload" , process_deletion_queue , false ) ;
5812- } ;
58135812 return saveAs ;
58145813} (
58155814 typeof self !== "undefined" && self
0 commit comments