filesaver.js
Advanced tools
Comparing version 0.1.1 to 0.2.0
/* FileSaver.js | ||
* A saveAs() FileSaver implementation. | ||
* 2014-12-17 | ||
* 1.1.20150716 | ||
* | ||
@@ -15,12 +15,6 @@ * By Eli Grey, http://eligrey.com | ||
var saveAs = saveAs | ||
// IE 10+ (native saveAs) | ||
|| (typeof navigator !== "undefined" && | ||
navigator.msSaveOrOpenBlob && navigator.msSaveOrOpenBlob.bind(navigator)) | ||
// Everyone else | ||
|| (function(view) { | ||
var saveAs = saveAs || (function(view) { | ||
"use strict"; | ||
// IE <10 is explicitly unsupported | ||
if (typeof navigator !== "undefined" && | ||
/MSIE [1-9]\./.test(navigator.userAgent)) { | ||
if (typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) { | ||
return; | ||
@@ -37,7 +31,3 @@ } | ||
, click = function(node) { | ||
var event = doc.createEvent("MouseEvents"); | ||
event.initMouseEvent( | ||
"click", true, false, view, 0, 0, 0, 0, 0 | ||
, false, false, false, false, 0, null | ||
); | ||
var event = new MouseEvent("click"); | ||
node.dispatchEvent(event); | ||
@@ -86,3 +76,13 @@ } | ||
} | ||
, FileSaver = function(blob, name) { | ||
, auto_bom = function(blob) { | ||
// prepend BOM for UTF-8 XML and text/* types (including HTML) | ||
if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { | ||
return new Blob(["\ufeff", blob], {type: blob.type}); | ||
} | ||
return blob; | ||
} | ||
, FileSaver = function(blob, name, no_auto_bom) { | ||
if (!no_auto_bom) { | ||
blob = auto_bom(blob); | ||
} | ||
// First try a.download, then web filesystem, then object URLs | ||
@@ -135,6 +135,8 @@ var | ||
save_link.download = name; | ||
click(save_link); | ||
filesaver.readyState = filesaver.DONE; | ||
dispatch_all(); | ||
revoke(object_url); | ||
setTimeout(function() { | ||
click(save_link); | ||
dispatch_all(); | ||
revoke(object_url); | ||
filesaver.readyState = filesaver.DONE; | ||
}); | ||
return; | ||
@@ -210,6 +212,16 @@ } | ||
, FS_proto = FileSaver.prototype | ||
, saveAs = function(blob, name) { | ||
return new FileSaver(blob, name); | ||
, saveAs = function(blob, name, no_auto_bom) { | ||
return new FileSaver(blob, name, no_auto_bom); | ||
} | ||
; | ||
// IE 10+ (native saveAs) | ||
if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) { | ||
return function(blob, name, no_auto_bom) { | ||
if (!no_auto_bom) { | ||
blob = auto_bom(blob); | ||
} | ||
return navigator.msSaveOrOpenBlob(blob, name || "download"); | ||
}; | ||
} | ||
FS_proto.abort = function() { | ||
@@ -244,3 +256,3 @@ var filesaver = this; | ||
if (typeof module !== "undefined" && module.exports) { | ||
module.exports = saveAs; | ||
module.exports.saveAs = saveAs; | ||
} else if ((typeof define !== "undefined" && define !== null) && (define.amd != null)) { | ||
@@ -247,0 +259,0 @@ define([], function() { |
/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */ | ||
var saveAs=saveAs||typeof navigator!=="undefined"&&navigator.msSaveOrOpenBlob&&navigator.msSaveOrOpenBlob.bind(navigator)||function(view){"use strict";if(typeof navigator!=="undefined"&&/MSIE [1-9]\./.test(navigator.userAgent)){return}var doc=view.document,get_URL=function(){return view.URL||view.webkitURL||view},save_link=doc.createElementNS("http://www.w3.org/1999/xhtml","a"),can_use_save_link="download"in save_link,click=function(node){var event=doc.createEvent("MouseEvents");event.initMouseEvent("click",true,false,view,0,0,0,0,0,false,false,false,false,0,null);node.dispatchEvent(event)},webkit_req_fs=view.webkitRequestFileSystem,req_fs=view.requestFileSystem||webkit_req_fs||view.mozRequestFileSystem,throw_outside=function(ex){(view.setImmediate||view.setTimeout)(function(){throw ex},0)},force_saveable_type="application/octet-stream",fs_min_size=0,arbitrary_revoke_timeout=500,revoke=function(file){var revoker=function(){if(typeof file==="string"){get_URL().revokeObjectURL(file)}else{file.remove()}};if(view.chrome){revoker()}else{setTimeout(revoker,arbitrary_revoke_timeout)}},dispatch=function(filesaver,event_types,event){event_types=[].concat(event_types);var i=event_types.length;while(i--){var listener=filesaver["on"+event_types[i]];if(typeof listener==="function"){try{listener.call(filesaver,event||filesaver)}catch(ex){throw_outside(ex)}}}},FileSaver=function(blob,name){var filesaver=this,type=blob.type,blob_changed=false,object_url,target_view,dispatch_all=function(){dispatch(filesaver,"writestart progress write writeend".split(" "))},fs_error=function(){if(blob_changed||!object_url){object_url=get_URL().createObjectURL(blob)}if(target_view){target_view.location.href=object_url}else{var new_tab=view.open(object_url,"_blank");if(new_tab==undefined&&typeof safari!=="undefined"){view.location.href=object_url}}filesaver.readyState=filesaver.DONE;dispatch_all();revoke(object_url)},abortable=function(func){return function(){if(filesaver.readyState!==filesaver.DONE){return func.apply(this,arguments)}}},create_if_not_found={create:true,exclusive:false},slice;filesaver.readyState=filesaver.INIT;if(!name){name="download"}if(can_use_save_link){object_url=get_URL().createObjectURL(blob);save_link.href=object_url;save_link.download=name;click(save_link);filesaver.readyState=filesaver.DONE;dispatch_all();revoke(object_url);return}if(view.chrome&&type&&type!==force_saveable_type){slice=blob.slice||blob.webkitSlice;blob=slice.call(blob,0,blob.size,force_saveable_type);blob_changed=true}if(webkit_req_fs&&name!=="download"){name+=".download"}if(type===force_saveable_type||webkit_req_fs){target_view=view}if(!req_fs){fs_error();return}fs_min_size+=blob.size;req_fs(view.TEMPORARY,fs_min_size,abortable(function(fs){fs.root.getDirectory("saved",create_if_not_found,abortable(function(dir){var save=function(){dir.getFile(name,create_if_not_found,abortable(function(file){file.createWriter(abortable(function(writer){writer.onwriteend=function(event){target_view.location.href=file.toURL();filesaver.readyState=filesaver.DONE;dispatch(filesaver,"writeend",event);revoke(file)};writer.onerror=function(){var error=writer.error;if(error.code!==error.ABORT_ERR){fs_error()}};"writestart progress write abort".split(" ").forEach(function(event){writer["on"+event]=filesaver["on"+event]});writer.write(blob);filesaver.abort=function(){writer.abort();filesaver.readyState=filesaver.DONE};filesaver.readyState=filesaver.WRITING}),fs_error)}),fs_error)};dir.getFile(name,{create:false},abortable(function(file){file.remove();save()}),abortable(function(ex){if(ex.code===ex.NOT_FOUND_ERR){save()}else{fs_error()}}))}),fs_error)}),fs_error)},FS_proto=FileSaver.prototype,saveAs=function(blob,name){return new FileSaver(blob,name)};FS_proto.abort=function(){var filesaver=this;filesaver.readyState=filesaver.DONE;dispatch(filesaver,"abort")};FS_proto.readyState=FS_proto.INIT=0;FS_proto.WRITING=1;FS_proto.DONE=2;FS_proto.error=FS_proto.onwritestart=FS_proto.onprogress=FS_proto.onwrite=FS_proto.onabort=FS_proto.onerror=FS_proto.onwriteend=null;return saveAs}(typeof self!=="undefined"&&self||typeof window!=="undefined"&&window||this.content);if(typeof module!=="undefined"&&module.exports){module.exports=saveAs}else if(typeof define!=="undefined"&&define!==null&&define.amd!=null){define([],function(){return saveAs})} | ||
var saveAs=saveAs||function(e){"use strict";if("undefined"==typeof navigator||!/MSIE [1-9]\./.test(navigator.userAgent)){var t=e.document,n=function(){return e.URL||e.webkitURL||e},o=t.createElementNS("http://www.w3.org/1999/xhtml","a"),r="download"in o,i=function(e){var t=new MouseEvent("click");e.dispatchEvent(t)},a=e.webkitRequestFileSystem,c=e.requestFileSystem||a||e.mozRequestFileSystem,u=function(t){(e.setImmediate||e.setTimeout)(function(){throw t},0)},f="application/octet-stream",s=0,d=500,l=function(t){var o=function(){"string"==typeof t?n().revokeObjectURL(t):t.remove()};e.chrome?o():setTimeout(o,d)},v=function(e,t,n){t=[].concat(t);for(var o=t.length;o--;){var r=e["on"+t[o]];if("function"==typeof r)try{r.call(e,n||e)}catch(i){u(i)}}},p=function(e){return/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["",e],{type:e.type}):e},w=function(t,u,d){d||(t=p(t));var w,y,m,S=this,h=t.type,O=!1,R=function(){v(S,"writestart progress write writeend".split(" "))},b=function(){if((O||!w)&&(w=n().createObjectURL(t)),y)y.location.href=w;else{var o=e.open(w,"_blank");void 0==o&&"undefined"!=typeof safari&&(e.location.href=w)}S.readyState=S.DONE,R(),l(w)},g=function(e){return function(){return S.readyState!==S.DONE?e.apply(this,arguments):void 0}},E={create:!0,exclusive:!1};return S.readyState=S.INIT,u||(u="download"),r?(w=n().createObjectURL(t),o.href=w,o.download=u,void setTimeout(function(){i(o),R(),l(w),S.readyState=S.DONE})):(e.chrome&&h&&h!==f&&(m=t.slice||t.webkitSlice,t=m.call(t,0,t.size,f),O=!0),a&&"download"!==u&&(u+=".download"),(h===f||a)&&(y=e),c?(s+=t.size,void c(e.TEMPORARY,s,g(function(e){e.root.getDirectory("saved",E,g(function(e){var n=function(){e.getFile(u,E,g(function(e){e.createWriter(g(function(n){n.onwriteend=function(t){y.location.href=e.toURL(),S.readyState=S.DONE,v(S,"writeend",t),l(e)},n.onerror=function(){var e=n.error;e.code!==e.ABORT_ERR&&b()},"writestart progress write abort".split(" ").forEach(function(e){n["on"+e]=S["on"+e]}),n.write(t),S.abort=function(){n.abort(),S.readyState=S.DONE},S.readyState=S.WRITING}),b)}),b)};e.getFile(u,{create:!1},g(function(e){e.remove(),n()}),g(function(e){e.code===e.NOT_FOUND_ERR?n():b()}))}),b)}),b)):void b())},y=w.prototype,m=function(e,t,n){return new w(e,t,n)};return"undefined"!=typeof navigator&&navigator.msSaveOrOpenBlob?function(e,t,n){return n||(e=p(e)),navigator.msSaveOrOpenBlob(e,t||"download")}:(y.abort=function(){var e=this;e.readyState=e.DONE,v(e,"abort")},y.readyState=y.INIT=0,y.WRITING=1,y.DONE=2,y.error=y.onwritestart=y.onprogress=y.onwrite=y.onabort=y.onerror=y.onwriteend=null,m)}}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||this.content);"undefined"!=typeof module&&module.exports?module.exports.saveAs=saveAs:"undefined"!=typeof define&&null!==define&&null!=define.amd&&define([],function(){return saveAs}); |
@@ -1,2 +0,2 @@ | ||
Copyright © 2014 [Eli Grey][1]. | ||
Copyright © 2015 [Eli Grey][1]. | ||
@@ -3,0 +3,0 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: |
{ | ||
"name": "filesaver.js", | ||
"version": "0.1.1", | ||
"version": "0.2.0", | ||
"description": "An HTML5 saveAs() FileSaver implementation", | ||
@@ -5,0 +5,0 @@ "main": "FileSaver.js", |
@@ -13,3 +13,3 @@ FileSaver.js | ||
Looking for `canvas.toBlob()` for saving canvases? Check out | ||
[canvas-toBlob.js](https://github.com/eligrey/canvas-toBlob.js) for a cross-browser implementation. | ||
[canvas-toBlob.js][2] for a cross-browser implementation. | ||
@@ -23,6 +23,6 @@ Supported browsers | ||
| Firefox < 20 | data: URI | No | n/a | [Blob.js](https://github.com/eligrey/Blob.js) | | ||
| Chrome | Blob | Yes | 345 MiB | None | | ||
| Chrome for Android | Blob | Yes | 345 MiB | None | | ||
| Chrome | Blob | Yes | [500 MiB][3] | None | | ||
| Chrome for Android | Blob | Yes | [500 MiB][3] | None | | ||
| IE 10+ | Blob | Yes | 600 MiB | None | | ||
| Opera 15+ | Blob | Yes | 345 MiB | None | | ||
| Opera 15+ | Blob | Yes | 500 MiB | None | | ||
| Opera < 15 | data: URI | No | n/a | [Blob.js](https://github.com/eligrey/Blob.js) | | ||
@@ -71,4 +71,4 @@ | Safari 6.1+* | Blob | No | ? | None | | ||
The standard W3C File API [`Blob`][3] interface is not available in all browsers. | ||
[Blob.js][4] is a cross-browser `Blob` implementation that solves this. | ||
The standard W3C File API [`Blob`][4] interface is not available in all browsers. | ||
[Blob.js][5] is a cross-browser `Blob` implementation that solves this. | ||
@@ -86,3 +86,3 @@ ### Saving a canvas | ||
Note: The standard HTML5 `canvas.toBlob()` method is not available in all browsers. | ||
[canvas-toBlob.js][5] is a cross-browser `canvas.toBlob()` that polyfills this. | ||
[canvas-toBlob.js][6] is a cross-browser `canvas.toBlob()` that polyfills this. | ||
@@ -93,5 +93,7 @@ | ||
[1]: http://eligrey.com/demos/FileSaver.js/ | ||
[3]: https://developer.mozilla.org/en-US/docs/DOM/Blob | ||
[4]: https://github.com/eligrey/Blob.js | ||
[5]: https://github.com/eligrey/canvas-toBlob.js | ||
[2]: https://github.com/eligrey/canvas-toBlob.js | ||
[3]: https://code.google.com/p/chromium/issues/detail?id=375297 | ||
[4]: https://developer.mozilla.org/en-US/docs/DOM/Blob | ||
[5]: https://github.com/eligrey/Blob.js | ||
[6]: https://github.com/eligrey/canvas-toBlob.js | ||
@@ -108,1 +110,6 @@ Contributing | ||
Please make sure you build a production version before submitting a pull request. | ||
Bower Installation | ||
------------------ | ||
Please see the [this repo](http://github.com/Teleborder/FileSaver.js) for a bower-compatible fork of FileSaver.js, available under the package name `file-saver.js`. |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
110
29671
500