server/php/basic/public_html/static/lib/FileSaver/FileSaver.js
author durandn
Thu, 21 Apr 2016 15:18:19 +0200
changeset 605 13d355fd09bf
parent 598 eb4f4eceada0
permissions -rw-r--r--
updated uri to allow optional trailing slash on single resource URIs (django automatic redirects don't carry over the Authorization header that can sometimes be needed, for instance with OAuth)
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.
598
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
     3
 * 1.1.20160328
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
598
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
     6
 * License: MIT
442
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
489
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
    15
var saveAs = saveAs || (function(view) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
	"use strict";
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
	// IE <10 is explicitly unsupported
489
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
    18
	if (typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
		return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
	var
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
		  doc = view.document
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
		  // 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
    24
		, get_URL = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
			return view.URL || view.webkitURL || view;
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
		, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
		, can_use_save_link = "download" in save_link
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
		, click = function(node) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
    30
			var event = new MouseEvent("click");
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
			node.dispatchEvent(event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
		}
598
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    33
		, is_safari = /Version\/[\d\.]+.*Safari/.test(navigator.userAgent)
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
		, webkit_req_fs = view.webkitRequestFileSystem
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
		, req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
		, throw_outside = function(ex) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
			(view.setImmediate || view.setTimeout)(function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
				throw ex;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
			}, 0);
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
		, force_saveable_type = "application/octet-stream"
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
		, fs_min_size = 0
598
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    43
		// the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    44
		, arbitrary_revoke_timeout = 1000 * 40 // in ms
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
		, revoke = function(file) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
			var revoker = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
				if (typeof file === "string") { // file is an object URL
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
					get_URL().revokeObjectURL(file);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
				} else { // file is a File
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
					file.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
			};
598
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    53
			/* // Take note W3C:
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    54
			var
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    55
			  uri = typeof file === "string" ? file : file.toURL()
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    56
			, revoker = function(evt) {
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    57
				// idealy DownloadFinishedEvent.data would be the URL requested
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    58
				if (evt.data === uri) {
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    59
					if (typeof file === "string") { // file is an object URL
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    60
						get_URL().revokeObjectURL(file);
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    61
					} else { // file is a File
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    62
						file.remove();
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    63
					}
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    64
				}
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
			}
598
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    66
			;
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    67
			view.addEventListener("downloadfinished", revoker);
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    68
			*/
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
    69
			setTimeout(revoker, arbitrary_revoke_timeout);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
		, dispatch = function(filesaver, event_types, event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
			event_types = [].concat(event_types);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
			var i = event_types.length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
			while (i--) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
				var listener = filesaver["on" + event_types[i]];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
				if (typeof listener === "function") {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
					try {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
						listener.call(filesaver, event || filesaver);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
					} catch (ex) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
						throw_outside(ex);
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
		}
489
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
    85
		, auto_bom = function(blob) {
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
    86
			// prepend BOM for UTF-8 XML and text/* types (including HTML)
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
    87
			if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
    88
				return new Blob(["\ufeff", blob], {type: blob.type});
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
    89
			}
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
    90
			return blob;
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
    91
		}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
    92
		, FileSaver = function(blob, name, no_auto_bom) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
    93
			if (!no_auto_bom) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
    94
				blob = auto_bom(blob);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
    95
			}
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
			// First try a.download, then web filesystem, then object URLs
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
			var
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
				  filesaver = this
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
				, type = blob.type
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
				, blob_changed = false
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
				, object_url
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
				, target_view
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
				, dispatch_all = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
					dispatch(filesaver, "writestart progress write writeend".split(" "));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
				// on any filesys errors revert to saving with object URLs
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
				, fs_error = function() {
598
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   108
					if (target_view && is_safari && typeof FileReader !== "undefined") {
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   109
						// Safari doesn't allow downloading of blob urls
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   110
						var reader = new FileReader();
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   111
						reader.onloadend = function() {
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   112
							var base64Data = reader.result;
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   113
							target_view.location.href = "data:attachment/file" + base64Data.slice(base64Data.search(/[,;]/));
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   114
							filesaver.readyState = filesaver.DONE;
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   115
							dispatch_all();
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   116
						};
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   117
						reader.readAsDataURL(blob);
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   118
						filesaver.readyState = filesaver.INIT;
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   119
						return;
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   120
					}
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
					// don't create more object URLs than needed
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
					if (blob_changed || !object_url) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
						object_url = get_URL().createObjectURL(blob);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
					if (target_view) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
						target_view.location.href = object_url;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
					} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
						var new_tab = view.open(object_url, "_blank");
598
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   129
						if (new_tab === undefined && is_safari) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
							//Apple do not allow window.open, see http://bit.ly/1kZffRI
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
							view.location.href = object_url
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
					filesaver.readyState = filesaver.DONE;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
					dispatch_all();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
					revoke(object_url);
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
				, abortable = function(func) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
					return function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
						if (filesaver.readyState !== filesaver.DONE) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
							return func.apply(this, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
					};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
				, create_if_not_found = {create: true, exclusive: false}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
				, slice
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
			filesaver.readyState = filesaver.INIT;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
			if (!name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
				name = "download";
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
			if (can_use_save_link) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
				object_url = get_URL().createObjectURL(blob);
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   154
				setTimeout(function() {
598
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   155
					save_link.href = object_url;
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   156
					save_link.download = name;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   157
					click(save_link);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   158
					dispatch_all();
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   159
					revoke(object_url);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   160
					filesaver.readyState = filesaver.DONE;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   161
				});
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
				return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
			// 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
   165
			// 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
   166
			// http://code.google.com/p/chromium/issues/detail?id=91158
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
			// Update: Google errantly closed 91158, I submitted it again:
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
			// https://code.google.com/p/chromium/issues/detail?id=389642
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
			if (view.chrome && type && type !== force_saveable_type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
				slice = blob.slice || blob.webkitSlice;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
				blob = slice.call(blob, 0, blob.size, force_saveable_type);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
				blob_changed = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
			// 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
   175
			// in WebKit, I append .download to the filename.
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
			// https://bugs.webkit.org/show_bug.cgi?id=65440
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
			if (webkit_req_fs && name !== "download") {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
				name += ".download";
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
			if (type === force_saveable_type || webkit_req_fs) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
				target_view = view;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
			if (!req_fs) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
				fs_error();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
				return;
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
			fs_min_size += blob.size;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
			req_fs(view.TEMPORARY, fs_min_size, abortable(function(fs) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
				fs.root.getDirectory("saved", create_if_not_found, abortable(function(dir) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
					var save = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
						dir.getFile(name, create_if_not_found, abortable(function(file) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
							file.createWriter(abortable(function(writer) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
								writer.onwriteend = function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
									target_view.location.href = file.toURL();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
									filesaver.readyState = filesaver.DONE;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
									dispatch(filesaver, "writeend", event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
									revoke(file);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
								};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
								writer.onerror = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
									var error = writer.error;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
									if (error.code !== error.ABORT_ERR) {
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
									}
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
								"writestart progress write abort".split(" ").forEach(function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
									writer["on" + event] = filesaver["on" + event];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
								});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
								writer.write(blob);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
								filesaver.abort = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
									writer.abort();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
									filesaver.readyState = filesaver.DONE;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
								};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
								filesaver.readyState = filesaver.WRITING;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
							}), fs_error);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
						}), fs_error);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
					};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
					dir.getFile(name, {create: false}, abortable(function(file) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
						// delete file if it already exists
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
						file.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
						save();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
					}), abortable(function(ex) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
						if (ex.code === ex.NOT_FOUND_ERR) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
							save();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
						} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
							fs_error();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
						}
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
				}), fs_error);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
			}), fs_error);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
		, FS_proto = FileSaver.prototype
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   232
		, saveAs = function(blob, name, no_auto_bom) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   233
			return new FileSaver(blob, name, no_auto_bom);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
	;
489
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
   236
	// IE 10+ (native saveAs)
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
   237
	if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   238
		return function(blob, name, no_auto_bom) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   239
			if (!no_auto_bom) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   240
				blob = auto_bom(blob);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   241
			}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   242
			return navigator.msSaveOrOpenBlob(blob, name || "download");
489
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
   243
		};
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
   244
	}
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
   245
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
	FS_proto.abort = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
		var filesaver = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
		filesaver.readyState = filesaver.DONE;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
		dispatch(filesaver, "abort");
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
	FS_proto.readyState = FS_proto.INIT = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
	FS_proto.WRITING = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
	FS_proto.DONE = 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
	FS_proto.error =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
	FS_proto.onwritestart =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
	FS_proto.onprogress =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
	FS_proto.onwrite =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
	FS_proto.onabort =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
	FS_proto.onerror =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
	FS_proto.onwriteend =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
		null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
	return saveAs;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
}(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
	   typeof self !== "undefined" && self
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
	|| typeof window !== "undefined" && window
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
	|| this.content
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
// `self` is undefined in Firefox for Android content script context
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
// while `this` is nsIContentFrameMessageManager
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
// with an attribute `content` that corresponds to the window
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
if (typeof module !== "undefined" && module.exports) {
489
7f25a4453865 update renkan server deploiement
ymh <ymh.work@gmail.com>
parents: 488
diff changeset
   275
  module.exports.saveAs = saveAs;
598
eb4f4eceada0 create new renkan version
ymh <ymh.work@gmail.com>
parents: 495
diff changeset
   276
} else if ((typeof define !== "undefined" && define !== null) && (define.amd !== null)) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
  define([], function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
    return saveAs;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
  });
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 489
diff changeset
   280
}