1
1
/** @preserve
2
2
* 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
5
5
*
6
6
* Copyright (c) 2010-2014 James Hall, https://github.com/MrRio/jsPDF
7
7
* 2010 Aaron Spike, https://github.com/acspike
@@ -407,18 +407,17 @@ var jsPDF = (function(global) {
407
407
}
408
408
events . publish ( 'addFonts' , { fonts : fonts , dictionary : fontmap } ) ;
409
409
} ,
410
- SAFE = function ( fn ) {
411
- fn . foo = function ( ) {
410
+ SAFE = function __safeCall ( fn ) {
411
+ fn . foo = function __safeCallWrapper ( ) {
412
412
try {
413
413
return fn . apply ( this , arguments ) ;
414
414
} catch ( e ) {
415
415
var stack = e . stack || '' ;
416
416
if ( ~ stack . indexOf ( ' at ' ) ) stack = stack . split ( " at " ) [ 1 ] ;
417
417
var m = "Error in function " + stack . split ( "\n" ) [ 0 ] . split ( '<' ) [ 0 ] + ": " + e . message ;
418
418
if ( global . console ) {
419
- console . log ( m , e ) ;
419
+ global . console . error ( m , e ) ;
420
420
if ( global . alert ) alert ( m ) ;
421
- console . trace ( ) ;
422
421
} else {
423
422
throw new Error ( m ) ;
424
423
}
@@ -752,6 +751,9 @@ var jsPDF = (function(global) {
752
751
* @name output
753
752
*/
754
753
output = SAFE ( function ( type , options ) {
754
+ var datauri = ( '' + type ) . substr ( 0 , 6 ) === 'dataur'
755
+ ? 'data:application/pdf;base64,' + btoa ( buildDocument ( ) ) :0 ;
756
+
755
757
switch ( type ) {
756
758
case undefined :
757
759
return buildDocument ( ) ;
@@ -765,24 +767,28 @@ var jsPDF = (function(global) {
765
767
saveAs ( getBlob ( ) , options ) ;
766
768
if ( typeof saveAs . unload === 'function' ) {
767
769
if ( global . setTimeout ) {
768
- setTimeout ( saveAs . unload , 70 ) ;
770
+ setTimeout ( saveAs . unload , 911 ) ;
769
771
}
770
772
}
771
773
break ;
772
774
case 'arraybuffer' :
773
775
return getArrayBuffer ( ) ;
774
776
case 'blob' :
775
777
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 ;
776
782
case 'datauristring' :
777
783
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 */
779
789
case 'datauri' :
780
790
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 ;
786
792
default :
787
793
throw new Error ( 'Output type "' + type + '" is not supported.' ) ;
788
794
}
@@ -1697,7 +1703,7 @@ var jsPDF = (function(global) {
1697
1703
* pdfdoc.mymethod() // <- !!!!!!
1698
1704
*/
1699
1705
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" ;
1701
1707
1702
1708
if ( typeof define === 'function' && define . amd ) {
1703
1709
define ( 'jsPDF' , function ( ) {
@@ -2337,10 +2343,10 @@ var jsPDF = (function(global) {
2337
2343
2338
2344
} else {
2339
2345
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' ;
2344
2350
}
2345
2351
}
2346
2352
format = ( format || 'JPEG' ) . toLowerCase ( ) ;
@@ -5588,7 +5594,7 @@ jsPDFAPI.putTotalPages = function(pageExpression) {
5588
5594
} ( typeof self !== "undefined" && self || typeof window !== "undefined" && window || this . content || this ) ) ;
5589
5595
/* FileSaver.js
5590
5596
* A saveAs() FileSaver implementation.
5591
- * 2014-05-27
5597
+ * 2014-07-21
5592
5598
*
5593
5599
* By Eli Grey, http://eligrey.com
5594
5600
* License: X11/MIT
@@ -5637,18 +5643,17 @@ var saveAs = saveAs
5637
5643
}
5638
5644
, force_saveable_type = "application/octet-stream"
5639
5645
, 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 ( ) {
5645
5651
if ( typeof file === "string" ) { // file is an object URL
5646
5652
get_URL ( ) . revokeObjectURL ( file ) ;
5647
5653
} else { // file is a File
5648
5654
file . remove ( ) ;
5649
5655
}
5650
- }
5651
- deletion_queue . length = 0 ; // clear queue
5656
+ } , arbitrary_revoke_timeout ) ;
5652
5657
}
5653
5658
, dispatch = function ( filesaver , event_types , event ) {
5654
5659
event_types = [ ] . concat ( event_types ) ;
@@ -5672,27 +5677,23 @@ var saveAs = saveAs
5672
5677
, blob_changed = false
5673
5678
, object_url
5674
5679
, 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
- }
5680
5680
, dispatch_all = function ( ) {
5681
5681
dispatch ( filesaver , "writestart progress write writeend" . split ( " " ) ) ;
5682
5682
}
5683
5683
// on any filesys errors revert to saving with object URLs
5684
5684
, fs_error = function ( ) {
5685
5685
// don't create more object URLs than needed
5686
5686
if ( blob_changed || ! object_url ) {
5687
- object_url = get_object_url ( blob ) ;
5687
+ object_url = get_URL ( ) . createObjectURL ( blob ) ;
5688
5688
}
5689
5689
if ( target_view ) {
5690
5690
target_view . location . href = object_url ;
5691
5691
} else {
5692
- window . open ( object_url , "_blank" ) ;
5692
+ view . open ( object_url , "_blank" ) ;
5693
5693
}
5694
5694
filesaver . readyState = filesaver . DONE ;
5695
5695
dispatch_all ( ) ;
5696
+ revoke ( object_url ) ;
5696
5697
}
5697
5698
, abortable = function ( func ) {
5698
5699
return function ( ) {
@@ -5709,17 +5710,20 @@ var saveAs = saveAs
5709
5710
name = "download" ;
5710
5711
}
5711
5712
if ( can_use_save_link ) {
5712
- object_url = get_object_url ( blob ) ;
5713
+ object_url = get_URL ( ) . createObjectURL ( blob ) ;
5713
5714
save_link . href = object_url ;
5714
5715
save_link . download = name ;
5715
5716
click ( save_link ) ;
5716
5717
filesaver . readyState = filesaver . DONE ;
5717
5718
dispatch_all ( ) ;
5719
+ revoke ( object_url ) ;
5718
5720
return ;
5719
5721
}
5720
5722
// Object and web filesystem URLs have a problem saving in Google Chrome when
5721
5723
// viewed in a tab, so I force save with application/octet-stream
5722
5724
// 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
5723
5727
if ( view . chrome && type && type !== force_saveable_type ) {
5724
5728
slice = blob . slice || blob . webkitSlice ;
5725
5729
blob = slice . call ( blob , 0 , blob . size , force_saveable_type ) ;
@@ -5746,9 +5750,9 @@ var saveAs = saveAs
5746
5750
file . createWriter ( abortable ( function ( writer ) {
5747
5751
writer . onwriteend = function ( event ) {
5748
5752
target_view . location . href = file . toURL ( ) ;
5749
- deletion_queue . push ( file ) ;
5750
5753
filesaver . readyState = filesaver . DONE ;
5751
5754
dispatch ( filesaver , "writeend" , event ) ;
5755
+ revoke ( file ) ;
5752
5756
} ;
5753
5757
writer . onerror = function ( ) {
5754
5758
var error = writer . error ;
@@ -5805,11 +5809,6 @@ var saveAs = saveAs
5805
5809
FS_proto . onwriteend =
5806
5810
null ;
5807
5811
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
- } ;
5813
5812
return saveAs ;
5814
5813
} (
5815
5814
typeof self !== "undefined" && self
0 commit comments