Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
bootstrap
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
bootstrap
Commits
b8928340
Commit
b8928340
authored
Dec 02, 2013
by
XhmikosR
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update filesaver.js to the latest git.
parent
c56e63e9
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
376 additions
and
146 deletions
+376
-146
docs-assets/js/filesaver.js
docs-assets/js/filesaver.js
+376
-146
No files found.
docs-assets/js/filesaver.js
View file @
b8928340
...
@@ -14,8 +14,8 @@
...
@@ -14,8 +14,8 @@
/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */
/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */
if
(
typeof
Blob
!==
"
function
"
||
typeof
URL
===
"
undefined
"
)
if
(
!
(
typeof
Blob
===
"
function
"
||
typeof
Blob
===
"
object
"
)
||
typeof
URL
===
"
undefined
"
)
if
(
typeof
Blob
===
"
function
"
&&
typeof
webkitURL
!==
"
undefined
"
)
self
.
URL
=
webkitURL
;
if
(
(
typeof
Blob
===
"
function
"
||
typeof
Blob
===
"
object
"
)
&&
typeof
webkitURL
!==
"
undefined
"
)
self
.
URL
=
webkitURL
;
else
var
Blob
=
(
function
(
view
)
{
else
var
Blob
=
(
function
(
view
)
{
"
use strict
"
;
"
use strict
"
;
...
@@ -165,5 +165,235 @@ else var Blob = (function (view) {
...
@@ -165,5 +165,235 @@ else var Blob = (function (view) {
};
};
}(
self
));
}(
self
));
/* FileSaver.js
* A saveAs() FileSaver implementation.
* 2013-10-21
*
* By Eli Grey, http://eligrey.com
* License: X11/MIT
* See LICENSE.md
*/
/*global self */
/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
plusplus: true */
/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
var
saveAs
=
saveAs
||
(
navigator
.
msSaveOrOpenBlob
&&
navigator
.
msSaveOrOpenBlob
.
bind
(
navigator
))
||
(
function
(
h
){
"
use strict
"
;
var
r
=
h
.
document
,
l
=
function
(){
return
h
.
URL
||
h
.
webkitURL
||
h
},
e
=
h
.
URL
||
h
.
webkitURL
||
h
,
n
=
r
.
createElementNS
(
"
http://www.w3.org/1999/xhtml
"
,
"
a
"
),
g
=!
h
.
externalHost
&&
"
download
"
in
n
,
j
=
function
(
t
){
var
s
=
r
.
createEvent
(
"
MouseEvents
"
);
s
.
initMouseEvent
(
"
click
"
,
true
,
false
,
h
,
0
,
0
,
0
,
0
,
0
,
false
,
false
,
false
,
false
,
0
,
null
);
t
.
dispatchEvent
(
s
)},
o
=
h
.
webkitRequestFileSystem
,
p
=
h
.
requestFileSystem
||
o
||
h
.
mozRequestFileSystem
,
m
=
function
(
s
){(
h
.
setImmediate
||
h
.
setTimeout
)(
function
(){
throw
s
},
0
)},
c
=
"
application/octet-stream
"
,
k
=
0
,
b
=
[],
i
=
function
(){
var
t
=
b
.
length
;
while
(
t
--
){
var
s
=
b
[
t
];
if
(
typeof
s
===
"
string
"
){
e
.
revokeObjectURL
(
s
)}
else
{
s
.
remove
()}}
b
.
length
=
0
},
q
=
function
(
t
,
s
,
w
){
s
=
[].
concat
(
s
);
var
v
=
s
.
length
;
while
(
v
--
){
var
x
=
t
[
"
on
"
+
s
[
v
]];
if
(
typeof
x
===
"
function
"
){
try
{
x
.
call
(
t
,
w
||
t
)}
catch
(
u
){
m
(
u
)}}}},
f
=
function
(
t
,
u
){
var
v
=
this
,
B
=
t
.
type
,
E
=
false
,
x
,
w
,
s
=
function
(){
var
F
=
l
().
createObjectURL
(
t
);
b
.
push
(
F
);
return
F
},
A
=
function
(){
q
(
v
,
"
writestart progress write writeend
"
.
split
(
"
"
))},
D
=
function
(){
if
(
E
||!
x
){
x
=
s
(
t
)}
if
(
w
){
w
.
location
.
href
=
x
}
else
{
window
.
open
(
x
,
"
_blank
"
)}
v
.
readyState
=
v
.
DONE
;
A
()},
z
=
function
(
F
){
return
function
(){
if
(
v
.
readyState
!==
v
.
DONE
){
return
F
.
apply
(
this
,
arguments
)}}},
y
=
{
create
:
true
,
exclusive
:
false
},
C
;
v
.
readyState
=
v
.
INIT
;
if
(
!
u
){
u
=
"
download
"
}
if
(
g
){
x
=
s
(
t
);
n
.
href
=
x
;
n
.
download
=
u
;
j
(
n
);
v
.
readyState
=
v
.
DONE
;
A
();
return
}
if
(
h
.
chrome
&&
B
&&
B
!==
c
){
C
=
t
.
slice
||
t
.
webkitSlice
;
t
=
C
.
call
(
t
,
0
,
t
.
size
,
c
);
E
=
true
}
if
(
o
&&
u
!==
"
download
"
){
u
+=
"
.download
"
}
if
(
B
===
c
||
o
){
w
=
h
}
if
(
!
p
){
D
();
return
}
k
+=
t
.
size
;
p
(
h
.
TEMPORARY
,
k
,
z
(
function
(
F
){
F
.
root
.
getDirectory
(
"
saved
"
,
y
,
z
(
function
(
G
){
var
H
=
function
(){
G
.
getFile
(
u
,
y
,
z
(
function
(
I
){
I
.
createWriter
(
z
(
function
(
J
){
J
.
onwriteend
=
function
(
K
){
w
.
location
.
href
=
I
.
toURL
();
b
.
push
(
I
);
v
.
readyState
=
v
.
DONE
;
q
(
v
,
"
writeend
"
,
K
)};
J
.
onerror
=
function
(){
var
K
=
J
.
error
;
if
(
K
.
code
!==
K
.
ABORT_ERR
){
D
()}};
"
writestart progress write abort
"
.
split
(
"
"
).
forEach
(
function
(
K
){
J
[
"
on
"
+
K
]
=
v
[
"
on
"
+
K
]});
J
.
write
(
t
);
v
.
abort
=
function
(){
J
.
abort
();
v
.
readyState
=
v
.
DONE
};
v
.
readyState
=
v
.
WRITING
}),
D
)}),
D
)};
G
.
getFile
(
u
,{
create
:
false
},
z
(
function
(
I
){
I
.
remove
();
H
()}),
z
(
function
(
I
){
if
(
I
.
code
===
I
.
NOT_FOUND_ERR
){
H
()}
else
{
D
()}}))}),
D
)}),
D
)},
d
=
f
.
prototype
,
a
=
function
(
s
,
t
){
return
new
f
(
s
,
t
)};
d
.
abort
=
function
(){
var
s
=
this
;
s
.
readyState
=
s
.
DONE
;
q
(
s
,
"
abort
"
)};
d
.
readyState
=
d
.
INIT
=
0
;
d
.
WRITING
=
1
;
d
.
DONE
=
2
;
d
.
error
=
d
.
onwritestart
=
d
.
onprogress
=
d
.
onwrite
=
d
.
onabort
=
d
.
onerror
=
d
.
onwriteend
=
null
;
h
.
addEventListener
(
"
unload
"
,
i
,
false
);
return
a
}(
self
));
\ No newline at end of file
var
saveAs
=
saveAs
||
(
typeof
navigator
!==
'
undefined
'
&&
navigator
.
msSaveOrOpenBlob
&&
navigator
.
msSaveOrOpenBlob
.
bind
(
navigator
))
||
(
function
(
view
)
{
"
use strict
"
;
var
doc
=
view
.
document
// only get URL when necessary in case BlobBuilder.js hasn't overridden it yet
,
get_URL
=
function
()
{
return
view
.
URL
||
view
.
webkitURL
||
view
;
}
,
URL
=
view
.
URL
||
view
.
webkitURL
||
view
,
save_link
=
doc
.
createElementNS
(
"
http://www.w3.org/1999/xhtml
"
,
"
a
"
)
,
can_use_save_link
=
!
view
.
externalHost
&&
"
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
,
deletion_queue
=
[]
,
process_deletion_queue
=
function
()
{
var
i
=
deletion_queue
.
length
;
while
(
i
--
)
{
var
file
=
deletion_queue
[
i
];
if
(
typeof
file
===
"
string
"
)
{
// file is an object URL
URL
.
revokeObjectURL
(
file
);
}
else
{
// file is a File
file
.
remove
();
}
}
deletion_queue
.
length
=
0
;
// clear queue
}
,
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
)
{
// First try a.download, then web filesystem, then object URLs
var
filesaver
=
this
,
type
=
blob
.
type
,
blob_changed
=
false
,
object_url
,
target_view
,
get_object_url
=
function
()
{
var
object_url
=
get_URL
().
createObjectURL
(
blob
);
deletion_queue
.
push
(
object_url
);
return
object_url
;
}
,
dispatch_all
=
function
()
{
dispatch
(
filesaver
,
"
writestart progress write writeend
"
.
split
(
"
"
));
}
// on any filesys errors revert to saving with object URLs
,
fs_error
=
function
()
{
// don't create more object URLs than needed
if
(
blob_changed
||
!
object_url
)
{
object_url
=
get_object_url
(
blob
);
}
if
(
target_view
)
{
target_view
.
location
.
href
=
object_url
;
}
else
{
window
.
open
(
object_url
,
"
_blank
"
);
}
filesaver
.
readyState
=
filesaver
.
DONE
;
dispatch_all
();
}
,
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_object_url
(
blob
);
// FF for Android has a nasty garbage collection mechanism
// that turns all objects that are not pure javascript into 'deadObject'
// this means `doc` and `save_link` are unusable and need to be recreated
// `view` is usable though:
doc
=
view
.
document
;
save_link
=
doc
.
createElementNS
(
"
http://www.w3.org/1999/xhtml
"
,
"
a
"
);
save_link
.
href
=
object_url
;
save_link
.
download
=
name
;
var
event
=
doc
.
createEvent
(
"
MouseEvents
"
);
event
.
initMouseEvent
(
"
click
"
,
true
,
false
,
view
,
0
,
0
,
0
,
0
,
0
,
false
,
false
,
false
,
false
,
0
,
null
);
save_link
.
dispatchEvent
(
event
);
filesaver
.
readyState
=
filesaver
.
DONE
;
dispatch_all
();
return
;
}
// Object and web filesystem URLs have a problem saving in Google Chrome when
// viewed in a tab, so I force save with application/octet-stream
// http://code.google.com/p/chromium/issues/detail?id=91158
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
;
}
// Since I can't be sure that the guessed media type will trigger a download
// in WebKit, I append .download to the filename.
// https://bugs.webkit.org/show_bug.cgi?id=65440
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
();
deletion_queue
.
push
(
file
);
filesaver
.
readyState
=
filesaver
.
DONE
;
dispatch
(
filesaver
,
"
writeend
"
,
event
);
};
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
)
{
// delete file if it already exists
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
;
view
.
addEventListener
(
"
unload
"
,
process_deletion_queue
,
false
);
return
saveAs
;
}(
this
.
self
||
this
.
window
||
this
.
content
));
// `self` is undefined in Firefox for Android content script context
// while `this` is nsIContentFrameMessageManager
// with an attribute `content` that corresponds to the window
if
(
typeof
module
!==
'
undefined
'
)
module
.
exports
=
saveAs
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment