server/php/basic/public_html/static/lib/FileSaver/FileSaver.js
author rougeronj
Wed, 03 Jun 2015 17:27:46 +0200
changeset 471 e0c7be5dc02c
parent 456 a3bf10beb710
child 461 48235ed6b07d
permissions -rw-r--r--
Add a router to handle fragment identifier Set up a listener of the router in the scene to update it Start Backbone.history (eventlistener of the router) when all the project is loaded Include router.js to all the test file
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
/* FileSaver.js
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
 * A saveAs() FileSaver implementation.
456
a3bf10beb710 copy client change to server (grunt copy-server)
rougeronj
parents: 442
diff changeset
     3
 * 2014-12-17
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * By Eli Grey, http://eligrey.com
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * License: X11/MIT
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 *   See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 */
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
/*global self */
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
var saveAs = saveAs
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
  // IE 10+ (native saveAs)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
  || (typeof navigator !== "undefined" &&
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
      navigator.msSaveOrOpenBlob && navigator.msSaveOrOpenBlob.bind(navigator))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
  // Everyone else
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
  || (function(view) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
	"use strict";
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
	// IE <10 is explicitly unsupported
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
	if (typeof navigator !== "undefined" &&
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
	    /MSIE [1-9]\./.test(navigator.userAgent)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
		return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
	var
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
		  doc = view.document
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
		  // only get URL when necessary in case Blob.js hasn't overridden it yet
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
		, get_URL = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
			return view.URL || view.webkitURL || view;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
		, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
		, can_use_save_link = "download" in save_link
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
		, click = function(node) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
			var event = doc.createEvent("MouseEvents");
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
			event.initMouseEvent(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
				"click", true, false, view, 0, 0, 0, 0, 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
				, false, false, false, false, 0, null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
			);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
			node.dispatchEvent(event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
		, webkit_req_fs = view.webkitRequestFileSystem
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
		, req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
		, throw_outside = function(ex) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
			(view.setImmediate || view.setTimeout)(function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
				throw ex;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
			}, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
		, force_saveable_type = "application/octet-stream"
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
		, fs_min_size = 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
		// See https://code.google.com/p/chromium/issues/detail?id=375297#c7 and
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
		// https://github.com/eligrey/FileSaver.js/commit/485930a#commitcomment-8768047
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
		// for the reasoning behind the timeout and revocation flow
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
		, arbitrary_revoke_timeout = 500 // in ms
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
		, revoke = function(file) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
			var revoker = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
				if (typeof file === "string") { // file is an object URL
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
					get_URL().revokeObjectURL(file);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
				} else { // file is a File
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
					file.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
			};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
			if (view.chrome) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
				revoker();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
				setTimeout(revoker, arbitrary_revoke_timeout);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
		, dispatch = function(filesaver, event_types, event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
			event_types = [].concat(event_types);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
			var i = event_types.length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
			while (i--) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
				var listener = filesaver["on" + event_types[i]];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
				if (typeof listener === "function") {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
					try {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
						listener.call(filesaver, event || filesaver);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
					} catch (ex) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
						throw_outside(ex);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
		, FileSaver = function(blob, name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
			// First try a.download, then web filesystem, then object URLs
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
			var
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
				  filesaver = this
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
				, type = blob.type
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
				, blob_changed = false
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
				, object_url
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
				, target_view
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
				, dispatch_all = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
					dispatch(filesaver, "writestart progress write writeend".split(" "));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
				// on any filesys errors revert to saving with object URLs
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
				, fs_error = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
					// don't create more object URLs than needed
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
					if (blob_changed || !object_url) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
						object_url = get_URL().createObjectURL(blob);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
					if (target_view) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
						target_view.location.href = object_url;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
					} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
						var new_tab = view.open(object_url, "_blank");
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
						if (new_tab == undefined && typeof safari !== "undefined") {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
							//Apple do not allow window.open, see http://bit.ly/1kZffRI
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
							view.location.href = object_url
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
					filesaver.readyState = filesaver.DONE;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
					dispatch_all();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
					revoke(object_url);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
				, abortable = function(func) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
					return function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
						if (filesaver.readyState !== filesaver.DONE) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
							return func.apply(this, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
					};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
				, create_if_not_found = {create: true, exclusive: false}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
				, slice
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
			;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
			filesaver.readyState = filesaver.INIT;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
			if (!name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
				name = "download";
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
			if (can_use_save_link) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
				object_url = get_URL().createObjectURL(blob);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
				save_link.href = object_url;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
				save_link.download = name;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
				click(save_link);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
				filesaver.readyState = filesaver.DONE;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
				dispatch_all();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
				revoke(object_url);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
				return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
			// Object and web filesystem URLs have a problem saving in Google Chrome when
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
			// viewed in a tab, so I force save with application/octet-stream
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
			// http://code.google.com/p/chromium/issues/detail?id=91158
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
			// Update: Google errantly closed 91158, I submitted it again:
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
			// https://code.google.com/p/chromium/issues/detail?id=389642
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
			if (view.chrome && type && type !== force_saveable_type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
				slice = blob.slice || blob.webkitSlice;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
				blob = slice.call(blob, 0, blob.size, force_saveable_type);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
				blob_changed = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
			// Since I can't be sure that the guessed media type will trigger a download
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
			// in WebKit, I append .download to the filename.
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
			// https://bugs.webkit.org/show_bug.cgi?id=65440
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
			if (webkit_req_fs && name !== "download") {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
				name += ".download";
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
			if (type === force_saveable_type || webkit_req_fs) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
				target_view = view;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
			if (!req_fs) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
				fs_error();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
				return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
			fs_min_size += blob.size;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
			req_fs(view.TEMPORARY, fs_min_size, abortable(function(fs) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
				fs.root.getDirectory("saved", create_if_not_found, abortable(function(dir) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
					var save = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
						dir.getFile(name, create_if_not_found, abortable(function(file) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
							file.createWriter(abortable(function(writer) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
								writer.onwriteend = function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
									target_view.location.href = file.toURL();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
									filesaver.readyState = filesaver.DONE;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
									dispatch(filesaver, "writeend", event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
									revoke(file);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
								};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
								writer.onerror = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
									var error = writer.error;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
									if (error.code !== error.ABORT_ERR) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
										fs_error();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
									}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
								};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
								"writestart progress write abort".split(" ").forEach(function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
									writer["on" + event] = filesaver["on" + event];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
								});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
								writer.write(blob);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
								filesaver.abort = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
									writer.abort();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
									filesaver.readyState = filesaver.DONE;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
								};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
								filesaver.readyState = filesaver.WRITING;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
							}), fs_error);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
						}), fs_error);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
					};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
					dir.getFile(name, {create: false}, abortable(function(file) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
						// delete file if it already exists
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
						file.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
						save();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
					}), abortable(function(ex) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
						if (ex.code === ex.NOT_FOUND_ERR) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
							save();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
						} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
							fs_error();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
					}));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
				}), fs_error);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
			}), fs_error);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
		, FS_proto = FileSaver.prototype
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
		, saveAs = function(blob, name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
			return new FileSaver(blob, name);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
	;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
	FS_proto.abort = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
		var filesaver = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
		filesaver.readyState = filesaver.DONE;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
		dispatch(filesaver, "abort");
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
	FS_proto.readyState = FS_proto.INIT = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
	FS_proto.WRITING = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
	FS_proto.DONE = 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
	FS_proto.error =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
	FS_proto.onwritestart =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
	FS_proto.onprogress =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
	FS_proto.onwrite =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
	FS_proto.onabort =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
	FS_proto.onerror =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
	FS_proto.onwriteend =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
		null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
	return saveAs;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
}(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
	   typeof self !== "undefined" && self
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
	|| typeof window !== "undefined" && window
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
	|| this.content
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
// `self` is undefined in Firefox for Android content script context
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
// while `this` is nsIContentFrameMessageManager
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
// with an attribute `content` that corresponds to the window
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
if (typeof module !== "undefined" && module.exports) {
456
a3bf10beb710 copy client change to server (grunt copy-server)
rougeronj
parents: 442
diff changeset
   239
  module.exports = saveAs;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
} else if ((typeof define !== "undefined" && define !== null) && (define.amd != null)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
  define([], function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
    return saveAs;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
  });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
}