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
42bee1dd
Commit
42bee1dd
authored
Dec 04, 2013
by
Mark Otto
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #11671 from XhmikosR/updates
Update 3rd party asset libraries
parents
cf81cb60
b8928340
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
599 additions
and
266 deletions
+599
-266
docs-assets/js/filesaver.js
docs-assets/js/filesaver.js
+376
-146
docs-assets/js/holder.js
docs-assets/js/holder.js
+202
-106
docs-assets/js/jszip.js
docs-assets/js/jszip.js
+21
-14
No files found.
docs-assets/js/filesaver.js
View file @
42bee1dd
...
...
@@ -14,8 +14,8 @@
/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */
if
(
typeof
Blob
!==
"
function
"
||
typeof
URL
===
"
undefined
"
)
if
(
typeof
Blob
===
"
function
"
&&
typeof
webkitURL
!==
"
undefined
"
)
self
.
URL
=
webkitURL
;
if
(
!
(
typeof
Blob
===
"
function
"
||
typeof
Blob
===
"
object
"
)
||
typeof
URL
===
"
undefined
"
)
if
(
(
typeof
Blob
===
"
function
"
||
typeof
Blob
===
"
object
"
)
&&
typeof
webkitURL
!==
"
undefined
"
)
self
.
URL
=
webkitURL
;
else
var
Blob
=
(
function
(
view
)
{
"
use strict
"
;
...
...
@@ -165,5 +165,235 @@ else var Blob = (function (view) {
};
}(
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 */
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
;
docs-assets/js/holder.js
View file @
42bee1dd
/*
Holder - 2.
1
- client side image placeholders
Holder - 2.
2
- client side image placeholders
(c) 2012-2013 Ivan Malopinsky / http://imsky.co
Provided under the MIT License.
...
...
@@ -14,6 +14,8 @@ var Holder = Holder || {};
var
preempted
=
false
,
fallback
=
false
,
canvas
=
document
.
createElement
(
'
canvas
'
);
var
dpr
=
1
,
bsr
=
1
;
var
resizable_images
=
[];
if
(
!
canvas
.
getContext
)
{
fallback
=
true
;
...
...
@@ -27,8 +29,6 @@ if (!canvas.getContext) {
}
}
var
dpr
=
1
,
bsr
=
1
;
if
(
!
fallback
){
dpr
=
window
.
devicePixelRatio
||
1
,
bsr
=
ctx
.
webkitBackingStorePixelRatio
||
ctx
.
mozBackingStorePixelRatio
||
ctx
.
msBackingStorePixelRatio
||
ctx
.
oBackingStorePixelRatio
||
ctx
.
backingStorePixelRatio
||
1
;
...
...
@@ -36,6 +36,99 @@ if(!fallback){
var
ratio
=
dpr
/
bsr
;
var
settings
=
{
domain
:
"
holder.js
"
,
images
:
"
img
"
,
bgnodes
:
"
.holderjs
"
,
themes
:
{
"
gray
"
:
{
background
:
"
#eee
"
,
foreground
:
"
#aaa
"
,
size
:
12
},
"
social
"
:
{
background
:
"
#3a5a97
"
,
foreground
:
"
#fff
"
,
size
:
12
},
"
industrial
"
:
{
background
:
"
#434A52
"
,
foreground
:
"
#C2F200
"
,
size
:
12
},
"
sky
"
:
{
background
:
"
#0D8FDB
"
,
foreground
:
"
#fff
"
,
size
:
12
},
"
vine
"
:
{
background
:
"
#39DBAC
"
,
foreground
:
"
#1E292C
"
,
size
:
12
},
"
lava
"
:
{
background
:
"
#F8591A
"
,
foreground
:
"
#1C2846
"
,
size
:
12
}
},
stylesheet
:
""
};
app
.
flags
=
{
dimensions
:
{
regex
:
/^
(\d
+
)
x
(\d
+
)
$/
,
output
:
function
(
val
)
{
var
exec
=
this
.
regex
.
exec
(
val
);
return
{
width
:
+
exec
[
1
],
height
:
+
exec
[
2
]
}
}
},
fluid
:
{
regex
:
/^
([
0-9%
]
+
)
x
([
0-9%
]
+
)
$/
,
output
:
function
(
val
)
{
var
exec
=
this
.
regex
.
exec
(
val
);
return
{
width
:
exec
[
1
],
height
:
exec
[
2
]
}
}
},
colors
:
{
regex
:
/#
([
0-9a-f
]{3,})\:
#
([
0-9a-f
]{3,})
/i
,
output
:
function
(
val
)
{
var
exec
=
this
.
regex
.
exec
(
val
);
return
{
size
:
settings
.
themes
.
gray
.
size
,
foreground
:
"
#
"
+
exec
[
2
],
background
:
"
#
"
+
exec
[
1
]
}
}
},
text
:
{
regex
:
/text
\:(
.*
)
/
,
output
:
function
(
val
)
{
return
this
.
regex
.
exec
(
val
)[
1
];
}
},
font
:
{
regex
:
/font
\:(
.*
)
/
,
output
:
function
(
val
)
{
return
this
.
regex
.
exec
(
val
)[
1
];
}
},
auto
:
{
regex
:
/^auto$/
},
textmode
:
{
regex
:
/textmode
\:(
.*
)
/
,
output
:
function
(
val
){
return
this
.
regex
.
exec
(
val
)[
1
];
}
}
}
//getElementsByClassName polyfill
document
.
getElementsByClassName
||
(
document
.
getElementsByClassName
=
function
(
e
){
var
t
=
document
,
n
,
r
,
i
,
s
=
[];
if
(
t
.
querySelectorAll
)
return
t
.
querySelectorAll
(
"
.
"
+
e
);
if
(
t
.
evaluate
){
r
=
"
.//*[contains(concat(' ', @class, ' '), '
"
+
e
+
"
')]
"
,
n
=
t
.
evaluate
(
r
,
t
,
null
,
0
,
null
);
while
(
i
=
n
.
iterateNext
())
s
.
push
(
i
)}
else
{
n
=
t
.
getElementsByTagName
(
"
*
"
),
r
=
new
RegExp
(
"
(^|
\\
s)
"
+
e
+
"
(
\\
s|$)
"
);
for
(
i
=
0
;
i
<
n
.
length
;
i
++
)
r
.
test
(
n
[
i
].
className
)
&&
s
.
push
(
n
[
i
])}
return
s
})
...
...
@@ -52,7 +145,20 @@ function selector(a){
}
//shallow object property extend
function
extend
(
a
,
b
){
var
c
=
{};
for
(
var
d
in
a
)
c
[
d
]
=
a
[
d
];
for
(
var
e
in
b
)
c
[
e
]
=
b
[
e
];
return
c
}
function
extend
(
a
,
b
){
var
c
=
{};
for
(
var
i
in
a
){
if
(
a
.
hasOwnProperty
(
i
)){
c
[
i
]
=
a
[
i
];
}
}
for
(
var
i
in
b
){
if
(
b
.
hasOwnProperty
(
i
)){
c
[
i
]
=
b
[
i
];
}
}
return
c
}
//hasOwnProperty polyfill
if
(
!
Object
.
prototype
.
hasOwnProperty
)
...
...
@@ -75,7 +181,15 @@ function text_size(width, height, template) {
}
}
function
draw
(
ctx
,
dimensions
,
template
,
ratio
,
literal
)
{
function
draw
(
args
)
{
var
ctx
=
args
.
ctx
;
var
dimensions
=
args
.
dimensions
;
var
template
=
args
.
template
;
var
ratio
=
args
.
ratio
;
var
holder
=
args
.
holder
;
var
literal
=
holder
.
textmode
==
"
literal
"
;
var
exact
=
holder
.
textmode
==
"
exact
"
;
var
ts
=
text_size
(
dimensions
.
width
,
dimensions
.
height
,
template
);
var
text_height
=
ts
.
height
;
var
width
=
dimensions
.
width
*
ratio
,
...
...
@@ -91,7 +205,12 @@ function draw(ctx, dimensions, template, ratio, literal) {
ctx
.
font
=
"
bold
"
+
text_height
+
"
px
"
+
font
;
var
text
=
template
.
text
?
template
.
text
:
(
Math
.
floor
(
dimensions
.
width
)
+
"
x
"
+
Math
.
floor
(
dimensions
.
height
));
if
(
literal
)
{
text
=
template
.
literalText
;
var
dimensions
=
holder
.
dimensions
;
text
=
dimensions
.
width
+
"
x
"
+
dimensions
.
height
;
}
else
if
(
exact
&&
holder
.
exact_dimensions
){
var
dimensions
=
holder
.
exact_dimensions
;
text
=
(
Math
.
floor
(
dimensions
.
width
)
+
"
x
"
+
Math
.
floor
(
dimensions
.
height
));
}
var
text_width
=
ctx
.
measureText
(
text
).
width
;
if
(
text_width
/
width
>=
0.75
)
{
...
...
@@ -104,6 +223,7 @@ function draw(ctx, dimensions, template, ratio, literal) {
}
function
render
(
mode
,
el
,
holder
,
src
)
{
var
dimensions
=
holder
.
dimensions
,
theme
=
holder
.
theme
,
text
=
holder
.
text
?
decodeURIComponent
(
holder
.
text
)
:
holder
.
text
;
...
...
@@ -115,9 +235,8 @@ function render(mode, el, holder, src) {
font
:
holder
.
font
})
:
theme
);
el
.
setAttribute
(
"
data-src
"
,
src
);
theme
.
literalText
=
dimensions_caption
;
holder
.
originalTheme
=
holder
.
theme
;
holder
.
theme
=
theme
;
el
.
holder_data
=
holder
;
if
(
mode
==
"
image
"
)
{
el
.
setAttribute
(
"
alt
"
,
text
?
text
:
theme
.
text
?
theme
.
text
+
"
[
"
+
dimensions_caption
+
"
]
"
:
dimensions_caption
);
...
...
@@ -128,11 +247,17 @@ function render(mode, el, holder, src) {
if
(
fallback
)
{
el
.
style
.
backgroundColor
=
theme
.
background
;
}
else
{
el
.
setAttribute
(
"
src
"
,
draw
(
ctx
,
dimensions
,
theme
,
ratio
));
el
.
setAttribute
(
"
src
"
,
draw
({
ctx
:
ctx
,
dimensions
:
dimensions
,
template
:
theme
,
ratio
:
ratio
,
holder
:
holder
}));
if
(
holder
.
textmode
&&
holder
.
textmode
==
"
exact
"
){
resizable_images
.
push
(
el
);
resizable_update
(
el
);
}
}
}
else
if
(
mode
==
"
background
"
)
{
if
(
!
fallback
)
{
el
.
style
.
backgroundImage
=
"
url(
"
+
draw
(
ctx
,
dimensions
,
theme
,
ratio
)
+
"
)
"
;
el
.
style
.
backgroundImage
=
"
url(
"
+
draw
(
{
ctx
:
ctx
,
dimensions
:
dimensions
,
template
:
theme
,
ratio
:
ratio
,
holder
:
holder
}
)
+
"
)
"
;
el
.
style
.
backgroundSize
=
dimensions
.
width
+
"
px
"
+
dimensions
.
height
+
"
px
"
;
}
}
else
if
(
mode
==
"
fluid
"
)
{
...
...
@@ -147,41 +272,82 @@ function render(mode, el, holder, src) {
}
else
{
el
.
style
.
width
=
dimensions
.
width
+
"
px
"
}
if
(
el
.
style
.
display
==
"
inline
"
||
el
.
style
.
display
===
""
)
{
if
(
el
.
style
.
display
==
"
inline
"
||
el
.
style
.
display
===
""
||
el
.
style
.
display
==
"
none
"
)
{
el
.
style
.
display
=
"
block
"
;
}
if
(
fallback
)
{
el
.
style
.
backgroundColor
=
theme
.
background
;
}
else
{
el
.
holderData
=
holder
;
fluid_images
.
push
(
el
);
fluid_update
(
el
);
resizable_images
.
push
(
el
);
resizable_update
(
el
);
}
}
}
function
dimension_check
(
el
,
callback
)
{
var
dimensions
=
{
height
:
el
.
clientHeight
,
width
:
el
.
clientWidth
};
if
(
!
dimensions
.
height
&&
!
dimensions
.
width
)
{
if
(
el
.
hasAttribute
(
"
data-holder-invisible
"
))
{
throw
new
Error
(
"
Holder: placeholder is not visible
"
);
}
else
{
el
.
setAttribute
(
"
data-holder-invisible
"
,
true
)
setTimeout
(
function
()
{
callback
.
call
(
this
,
el
)
},
1
)
return
null
;
}
}
else
{
el
.
removeAttribute
(
"
data-holder-invisible
"
)
}
return
dimensions
;
}
function
fluid
_update
(
element
)
{
function
resizable
_update
(
element
)
{
var
images
;
if
(
element
.
nodeType
==
null
)
{
images
=
fluid
_images
;
images
=
resizable
_images
;
}
else
{
images
=
[
element
]
}
for
(
var
i
in
images
)
{
if
(
!
images
.
hasOwnProperty
(
i
))
{
continue
;
}
var
el
=
images
[
i
]
if
(
el
.
holderData
)
{
var
holder
=
el
.
holderData
;
el
.
setAttribute
(
"
src
"
,
draw
(
ctx
,
{
height
:
el
.
clientHeight
,
width
:
el
.
clientWidth
},
holder
.
theme
,
ratio
,
!!
holder
.
literal
));
if
(
el
.
holder_data
)
{
var
holder
=
el
.
holder_data
;
var
dimensions
=
dimension_check
(
el
,
resizable_update
)
if
(
dimensions
){
if
(
holder
.
fluid
){
el
.
setAttribute
(
"
src
"
,
draw
({
ctx
:
ctx
,
dimensions
:
dimensions
,
template
:
holder
.
theme
,
ratio
:
ratio
,
holder
:
holder
}))
}
if
(
holder
.
textmode
&&
holder
.
textmode
==
"
exact
"
){
holder
.
exact_dimensions
=
dimensions
;
el
.
setAttribute
(
"
src
"
,
draw
({
ctx
:
ctx
,
dimensions
:
holder
.
dimensions
,
template
:
holder
.
theme
,
ratio
:
ratio
,
holder
:
holder
}))
}
}
}
}
}
function
parse_flags
(
flags
,
options
)
{
var
ret
=
{
theme
:
settings
.
themes
.
gray
theme
:
extend
(
settings
.
themes
.
gray
,
{})
};
var
render
=
false
;
for
(
sl
=
flags
.
length
,
j
=
0
;
j
<
sl
;
j
++
)
{
...
...
@@ -193,13 +359,15 @@ function parse_flags(flags, options) {
render
=
true
;
ret
.
dimensions
=
app
.
flags
.
fluid
.
output
(
flag
);
ret
.
fluid
=
true
;
}
else
if
(
app
.
flags
.
literal
.
match
(
flag
))
{
ret
.
literal
=
true
;
}
else
if
(
app
.
flags
.
textmode
.
match
(
flag
))
{
ret
.
textmode
=
app
.
flags
.
textmode
.
output
(
flag
)
}
else
if
(
app
.
flags
.
colors
.
match
(
flag
))
{
ret
.
theme
=
app
.
flags
.
colors
.
output
(
flag
);
}
else
if
(
options
.
themes
[
flag
])
{
//If a theme is specified, it will override custom colors
ret
.
theme
=
options
.
themes
[
flag
];
if
(
options
.
themes
.
hasOwnProperty
(
flag
)){
ret
.
theme
=
extend
(
options
.
themes
[
flag
],
{});
}
}
else
if
(
app
.
flags
.
font
.
match
(
flag
))
{
ret
.
font
=
app
.
flags
.
font
.
output
(
flag
);
}
else
if
(
app
.
flags
.
auto
.
match
(
flag
))
{
...
...
@@ -210,81 +378,7 @@ function parse_flags(flags, options) {
}
return
render
?
ret
:
false
;
}
var
fluid_images
=
[];
var
settings
=
{
domain
:
"
holder.js
"
,
images
:
"
img
"
,
bgnodes
:
"
.holderjs
"
,
themes
:
{
"
gray
"
:
{
background
:
"
#eee
"
,
foreground
:
"
#aaa
"
,
size
:
12
},
"
social
"
:
{
background
:
"
#3a5a97
"
,
foreground
:
"
#fff
"
,
size
:
12
},
"
industrial
"
:
{
background
:
"
#434A52
"
,
foreground
:
"
#C2F200
"
,
size
:
12
}
},
stylesheet
:
""
};
app
.
flags
=
{
dimensions
:
{
regex
:
/^
(\d
+
)
x
(\d
+
)
$/
,
output
:
function
(
val
)
{
var
exec
=
this
.
regex
.
exec
(
val
);
return
{
width
:
+
exec
[
1
],
height
:
+
exec
[
2
]
}
}
},
fluid
:
{
regex
:
/^
([
0-9%
]
+
)
x
([
0-9%
]
+
)
$/
,
output
:
function
(
val
)
{
var
exec
=
this
.
regex
.
exec
(
val
);
return
{
width
:
exec
[
1
],
height
:
exec
[
2
]
}
}
},
colors
:
{
regex
:
/#
([
0-9a-f
]{3,})\:
#
([
0-9a-f
]{3,})
/i
,
output
:
function
(
val
)
{
var
exec
=
this
.
regex
.
exec
(
val
);
return
{
size
:
settings
.
themes
.
gray
.
size
,
foreground
:
"
#
"
+
exec
[
2
],
background
:
"
#
"
+
exec
[
1
]
}
}
},
text
:
{
regex
:
/text
\:(
.*
)
/
,
output
:
function
(
val
)
{
return
this
.
regex
.
exec
(
val
)[
1
];
}
},
font
:
{
regex
:
/font
\:(
.*
)
/
,
output
:
function
(
val
)
{
return
this
.
regex
.
exec
(
val
)[
1
];
}
},
auto
:
{
regex
:
/^auto$/
},
literal
:
{
regex
:
/^literal$/
}
}
for
(
var
flag
in
app
.
flags
)
{
if
(
!
app
.
flags
.
hasOwnProperty
(
flag
))
continue
;
app
.
flags
[
flag
].
match
=
function
(
val
)
{
...
...
@@ -307,6 +401,8 @@ app.add_image = function (src, el) {
return
app
;
};
app
.
run
=
function
(
o
)
{
preempted
=
true
;
var
options
=
extend
(
settings
,
o
),
images
=
[],
imageNodes
=
[],
...
...
@@ -318,6 +414,7 @@ app.run = function (o) {
}
else
if
(
window
.
Node
&&
options
.
images
instanceof
window
.
Node
)
{
imageNodes
=
[
options
.
images
];
}
if
(
typeof
(
options
.
bgnodes
)
==
"
string
"
)
{
bgnodes
=
selector
(
options
.
bgnodes
);
}
else
if
(
window
.
NodeList
&&
options
.
elements
instanceof
window
.
NodeList
)
{
...
...
@@ -325,7 +422,6 @@ app.run = function (o) {
}
else
if
(
window
.
Node
&&
options
.
bgnodes
instanceof
window
.
Node
)
{
bgnodes
=
[
options
.
bgnodes
];
}
preempted
=
true
;
for
(
i
=
0
,
l
=
imageNodes
.
length
;
i
<
l
;
i
++
)
images
.
push
(
imageNodes
[
i
]);
var
holdercss
=
document
.
getElementById
(
"
holderjs-style
"
);
if
(
!
holdercss
)
{
...
...
@@ -388,10 +484,10 @@ app.run = function (o) {
};
contentLoaded
(
win
,
function
()
{
if
(
window
.
addEventListener
)
{
window
.
addEventListener
(
"
resize
"
,
fluid
_update
,
false
);
window
.
addEventListener
(
"
orientationchange
"
,
fluid
_update
,
false
);
window
.
addEventListener
(
"
resize
"
,
resizable
_update
,
false
);
window
.
addEventListener
(
"
orientationchange
"
,
resizable
_update
,
false
);
}
else
{
window
.
attachEvent
(
"
onresize
"
,
fluid
_update
)
window
.
attachEvent
(
"
onresize
"
,
resizable
_update
)
}
preempted
||
app
.
run
();
});
...
...
docs-assets/js/jszip.js
View file @
42bee1dd
...
...
@@ -16,7 +16,9 @@ Usage:
base64zip = zip.generate();
**/
"
use strict
"
;
// We use strict, but it should not be placed outside of a function because
// the environment is shared inside the browser.
// "use strict";
/**
* Representation a of zip file in js
...
...
@@ -93,8 +95,8 @@ JSZip.support = {
catch
(
e
)
{}
try
{
var
builder
=
new
(
window
.
BlobBuilder
||
window
.
WebKitBlobBuilder
||
window
.
MozBlobBuilder
||
window
.
MSBlobBuilder
)
();
var
BlobBuilder
=
window
.
BlobBuilder
||
window
.
WebKitBlobBuilder
||
window
.
MozBlobBuilder
||
window
.
MSBlobBuilder
;
var
builder
=
new
BlobBuilder
();
builder
.
append
(
buffer
);
return
builder
.
getBlob
(
'
application/zip
'
).
size
===
0
;
}
...
...
@@ -161,7 +163,7 @@ JSZip.prototype = (function () {
return
file
.
asBinary
();
}
return
result
;
}
}
;
/**
* Transform this._data into a string.
...
...
@@ -287,9 +289,11 @@ JSZip.prototype = (function () {
*/
var
prepareFileAttrs
=
function
(
o
)
{
o
=
o
||
{};
/*jshint -W041 */
if
(
o
.
base64
===
true
&&
o
.
binary
==
null
)
{
o
.
binary
=
true
;
}
/*jshint +W041 */
o
=
extend
(
o
,
JSZip
.
defaults
);
o
.
date
=
o
.
date
||
new
Date
();
if
(
o
.
compression
!==
null
)
o
.
compression
=
o
.
compression
.
toUpperCase
();
...
...
@@ -341,7 +345,9 @@ JSZip.prototype = (function () {
}
}
return
this
.
files
[
name
]
=
new
ZipObject
(
name
,
data
,
o
);
var
object
=
new
ZipObject
(
name
,
data
,
o
);
this
.
files
[
name
]
=
object
;
return
object
;
};
...
...
@@ -399,7 +405,7 @@ JSZip.prototype = (function () {
}
else
if
(
file
.
_data
.
compressionMethod
===
compression
.
magic
)
{
result
.
compressedContent
=
file
.
_data
.
getCompressedContent
();
}
else
{
content
=
file
.
_data
.
getContent
()
content
=
file
.
_data
.
getContent
()
;
// need to decompress / recompress
result
.
compressedContent
=
compression
.
compress
(
JSZip
.
utils
.
transformTo
(
compression
.
compressInputType
,
content
));
}
...
...
@@ -756,8 +762,9 @@ JSZip.prototype = (function () {
case
"
nodebuffer
"
:
writer
=
new
Uint8ArrayWriter
(
localDirLength
+
centralDirLength
+
dirEnd
.
length
);
break
;
case
"
base64
"
:
default
:
// case "string" :
// case "base64" :
// case "string" :
default
:
writer
=
new
StringWriter
(
localDirLength
+
centralDirLength
+
dirEnd
.
length
);
break
;
}
...
...
@@ -1066,8 +1073,8 @@ JSZip.compressions = {
try
{
// deprecated, browser only, old way
var
builder
=
new
(
window
.
BlobBuilder
||
window
.
WebKitBlobBuilder
||
window
.
MozBlobBuilder
||
window
.
MSBlobBuilder
)
();
var
BlobBuilder
=
window
.
BlobBuilder
||
window
.
WebKitBlobBuilder
||
window
.
MozBlobBuilder
||
window
.
MSBlobBuilder
;
var
builder
=
new
BlobBuilder
();
builder
.
append
(
buffer
);
return
builder
.
getBlob
(
'
application/zip
'
);
}
...
...
@@ -1095,7 +1102,7 @@ JSZip.compressions = {
*/
function
identity
(
input
)
{
return
input
;
}
;
}
/**
* Fill in an array with a string.
...
...
@@ -1108,7 +1115,7 @@ JSZip.compressions = {
array
[
i
]
=
str
.
charCodeAt
(
i
)
&
0xFF
;
}
return
array
;
}
;
}
/**
* Transform an array-like object to a string.
...
...
@@ -1165,7 +1172,7 @@ JSZip.compressions = {
}
}
return
result
.
join
(
""
);
}
;
}
/**
* Copy the data from an array-like to an other array-like.
...
...
@@ -1178,7 +1185,7 @@ JSZip.compressions = {
arrayTo
[
i
]
=
arrayFrom
[
i
];
}
return
arrayTo
;
}
;
}
// a matrix containing functions to transform everything into everything.
var
transform
=
{};
...
...
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