Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
tl_estate
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
hujun
tl_estate
Commits
bd495dd9
Commit
bd495dd9
authored
May 06, 2019
by
agping
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
财务日报截图
parent
eab758a4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
57 additions
and
4 deletions
+57
-4
daily_details.html
application/index/view/finance/daily_details.html
+1
-1
financial_manager_daily_list.js
public/resource/js/financial_manager_daily_list.js
+43
-3
main.js
public/resource/js/main.js
+4
-0
html2canvas.min.js
public/resource/lib/js/html2canvas.min.js
+9
-0
No files found.
application/index/view/finance/daily_details.html
View file @
bd495dd9
...
@@ -324,7 +324,7 @@
...
@@ -324,7 +324,7 @@
}
}
</style>
</style>
<div
id=
"page-content-wrapper"
>
<div
id=
"page-content-wrapper"
>
<div
class=
"container"
>
<div
class=
"container"
id=
"screen_shot_area"
>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
""
>
<div
class=
""
>
<div
class=
"panel panel-default"
>
<div
class=
"panel panel-default"
>
...
...
public/resource/js/financial_manager_daily_list.js
View file @
bd495dd9
define
([
'doT'
,
'text!temp/financial_manager_daily_list_template_tpl.html'
,
'css!style/home.css'
,
'css!style/report_list.css'
,
'ckfinder'
,
'ckfinderStart'
,
'pagination'
,
'bootstrapJs'
],
function
(
doT
,
template
,
template_tax
,
template_maid
,
template_maid_sub1
)
{
define
([
'doT'
,
'html2canvas'
,
'text!temp/financial_manager_daily_list_template_tpl.html'
,
'css!style/home.css'
,
'css!style/report_list.css'
,
'ckfinder'
,
'ckfinderStart'
,
'pagination'
,
'bootstrapJs'
],
function
(
doT
,
html2canvas
,
template
,
template_tax
,
template_maid
,
template_maid_sub1
)
{
var
user_info_obj
=
JSON
.
parse
(
decodeURIComponent
(
localStorage
.
getItem
(
'pcUserInfo'
)));
//读取缓存
var
user_info_obj
=
JSON
.
parse
(
decodeURIComponent
(
localStorage
.
getItem
(
'pcUserInfo'
)));
//读取缓存
bargain
=
{
bargain
=
{
pageNo
:
1
,
pageNo
:
1
,
...
@@ -24,7 +24,7 @@ define(['doT', 'text!temp/financial_manager_daily_list_template_tpl.html', 'css!
...
@@ -24,7 +24,7 @@ define(['doT', 'text!temp/financial_manager_daily_list_template_tpl.html', 'css!
payment_details_money
:
''
,
payment_details_money
:
''
,
receivedMoneyLiu
:
''
,
receivedMoneyLiu
:
''
,
isAjaxSaving
:
false
,
//防重复提交 财务日报
isAjaxSaving
:
false
,
//防重复提交 财务日报
dataUrl
:
''
,
//文件流
init
:
function
()
{
init
:
function
()
{
//初始化时间
//初始化时间
var
myDate
=
new
Date
();
var
myDate
=
new
Date
();
...
@@ -79,7 +79,12 @@ define(['doT', 'text!temp/financial_manager_daily_list_template_tpl.html', 'css!
...
@@ -79,7 +79,12 @@ define(['doT', 'text!temp/financial_manager_daily_list_template_tpl.html', 'css!
}
}
bargain
.
getList
(
1
);
bargain
.
getList
(
1
);
});
});
//测试 截图
// _doc.on('click', '.is-submit-pass-btn', function(e) {
// e.preventDefault();
// e.stopPropagation();
// bargain.saveHtml2Image();;
// });
//财务日报审核 点击关闭按钮
//财务日报审核 点击关闭按钮
_doc
.
on
(
'click'
,
'.is-close'
,
function
(
e
)
{
_doc
.
on
(
'click'
,
'.is-close'
,
function
(
e
)
{
e
.
preventDefault
();
e
.
preventDefault
();
...
@@ -1057,6 +1062,38 @@ define(['doT', 'text!temp/financial_manager_daily_list_template_tpl.html', 'css!
...
@@ -1057,6 +1062,38 @@ define(['doT', 'text!temp/financial_manager_daily_list_template_tpl.html', 'css!
}
}
});
});
},
},
//截图
saveHtml2Image
:
function
(
fn
)
{
$
(
"body,html"
).
animate
({
scrollTop
:
0
},
0
);
//必须把页面滚动到最顶部,不然截图会不完整
var
obj
=
$
(
"#screen_shot_area"
);
var
width
=
obj
.
width
();
var
height
=
obj
.
height
();
html2canvas
(
$
(
"#screen_shot_area"
),{
width
:
width
+
20
,
height
:
height
,
background
:
"rgba(255,255,255,1)"
,
onrendered
:
function
(
canvas
)
{
var
dataUrl
=
canvas
.
toDataURL
(
'image/jpeg'
);
bargain
.
savePicLiu
(
dataUrl
);
}
});
},
savePicLiu
:
function
(
url
)
{
$
.
ajax
({
url
:
'/index/dailyBackImg'
,
type
:
'POST'
,
async
:
true
,
data
:
{
"daily_id"
:
bargain
.
daily_id
,
//日报id
"img"
:
url
,
//文件流
},
dataType
:
'json'
,
success
:
function
(
data
)
{
if
(
data
.
code
==
200
&&
data
.
data
!=
null
)
{
}
}
});
},
getDistrictStoreList
:
function
(
id
,
fn
)
{
getDistrictStoreList
:
function
(
id
,
fn
)
{
$
.
ajax
({
$
.
ajax
({
url
:
'/index/getDistrictStoreList'
,
url
:
'/index/getDistrictStoreList'
,
...
@@ -1248,6 +1285,9 @@ define(['doT', 'text!temp/financial_manager_daily_list_template_tpl.html', 'css!
...
@@ -1248,6 +1285,9 @@ define(['doT', 'text!temp/financial_manager_daily_list_template_tpl.html', 'css!
success
:
function
(
data
)
{
success
:
function
(
data
)
{
if
(
data
.
code
==
200
)
{
if
(
data
.
code
==
200
)
{
alert
(
'提交成功'
);
alert
(
'提交成功'
);
if
(
bargain
.
operationStatus
==
1
){
bargain
.
saveHtml2Image
();
//截图 转为已审核
}
$
(
"#modal_financialremark"
).
modal
(
'hide'
);
//提交成功后 关闭弹窗
$
(
"#modal_financialremark"
).
modal
(
'hide'
);
//提交成功后 关闭弹窗
bargain
.
getList
();
bargain
.
getList
();
// location.href='/index/dailyList'
// location.href='/index/dailyList'
...
...
public/resource/js/main.js
View file @
bd495dd9
...
@@ -24,6 +24,7 @@ require.config ({
...
@@ -24,6 +24,7 @@ require.config ({
// 'datetimepicker': 'lib/js/bootstrap-datetimepicker.min',
// 'datetimepicker': 'lib/js/bootstrap-datetimepicker.min',
'datetimepicker'
:
'lib/js/bootstrap-datetimepicker'
,
'datetimepicker'
:
'lib/js/bootstrap-datetimepicker'
,
'PaginationLiu'
:
'lib/js/PaginationLiu'
,
'PaginationLiu'
:
'lib/js/PaginationLiu'
,
'html2canvas'
:
'lib/js/html2canvas.min'
,
'pagination'
:
'lib/js/Pagination'
,
'pagination'
:
'lib/js/Pagination'
,
'paginationStart'
:
'lib/js/zw.pagination'
,
'paginationStart'
:
'lib/js/zw.pagination'
,
'paginationStartLiu'
:
'lib/js/liu.pagination'
,
'paginationStartLiu'
:
'lib/js/liu.pagination'
,
...
@@ -78,6 +79,9 @@ require.config ({
...
@@ -78,6 +79,9 @@ require.config ({
'PaginationLiu'
:{
'PaginationLiu'
:{
'exports'
:
'PaginationLiu'
'exports'
:
'PaginationLiu'
},
},
'html2canvas'
:{
'exports'
:
'html2canvas'
},
'paginationStartLiu'
:{
'paginationStartLiu'
:{
'exports'
:
'paginationStartLiu'
'exports'
:
'paginationStartLiu'
},
},
...
...
public/resource/lib/js/html2canvas.min.js
0 → 100644
View file @
bd495dd9
/*
html2canvas 0.5.0-beta3 <http://html2canvas.hertzen.com>
Copyright (c) 2016 Niklas von Hertzen
Released under License
*/
!
function
(
e
){
if
(
"object"
==
typeof
exports
&&
"undefined"
!=
typeof
module
)
module
.
exports
=
e
();
else
if
(
"function"
==
typeof
define
&&
define
.
amd
)
define
([],
e
);
else
{
var
n
;
"undefined"
!=
typeof
window
?
n
=
window
:
"undefined"
!=
typeof
global
?
n
=
global
:
"undefined"
!=
typeof
self
&&
(
n
=
self
),
n
.
html2canvas
=
e
()}}(
function
(){
var
e
;
return
function
n
(
e
,
f
,
o
){
function
d
(
t
,
l
){
if
(
!
f
[
t
]){
if
(
!
e
[
t
]){
var
s
=
"function"
==
typeof
require
&&
require
;
if
(
!
l
&&
s
)
return
s
(
t
,
!
0
);
if
(
i
)
return
i
(
t
,
!
0
);
var
u
=
new
Error
(
"Cannot find module '"
+
t
+
"'"
);
throw
u
.
code
=
"MODULE_NOT_FOUND"
,
u
}
var
a
=
f
[
t
]
=
{
exports
:{}};
e
[
t
][
0
].
call
(
a
.
exports
,
function
(
n
){
var
f
=
e
[
t
][
1
][
n
];
return
d
(
f
?
f
:
n
)},
a
,
a
.
exports
,
n
,
e
,
f
,
o
)}
return
f
[
t
].
exports
}
for
(
var
i
=
"function"
==
typeof
require
&&
require
,
t
=
0
;
t
<
o
.
length
;
t
++
)
d
(
o
[
t
]);
return
d
}({
1
:[
function
(
n
,
f
,
o
){(
function
(
n
){
!
function
(
d
){
function
i
(
e
){
throw
RangeError
(
I
[
e
])}
function
t
(
e
,
n
){
for
(
var
f
=
e
.
length
;
f
--
;)
e
[
f
]
=
n
(
e
[
f
]);
return
e
}
function
l
(
e
,
n
){
return
t
(
e
.
split
(
H
),
n
).
join
(
"."
)}
function
s
(
e
){
for
(
var
n
,
f
,
o
=
[],
d
=
0
,
i
=
e
.
length
;
i
>
d
;)
n
=
e
.
charCodeAt
(
d
++
),
n
>=
55296
&&
56319
>=
n
&&
i
>
d
?(
f
=
e
.
charCodeAt
(
d
++
),
56320
==
(
64512
&
f
)?
o
.
push
(((
1023
&
n
)
<<
10
)
+
(
1023
&
f
)
+
65536
):(
o
.
push
(
n
),
d
--
)):
o
.
push
(
n
);
return
o
}
function
u
(
e
){
return
t
(
e
,
function
(
e
){
var
n
=
""
;
return
e
>
65535
&&
(
e
-=
65536
,
n
+=
L
(
e
>>>
10
&
1023
|
55296
),
e
=
56320
|
1023
&
e
),
n
+=
L
(
e
)}).
join
(
""
)}
function
a
(
e
){
return
10
>
e
-
48
?
e
-
22
:
26
>
e
-
65
?
e
-
65
:
26
>
e
-
97
?
e
-
97
:
k
}
function
p
(
e
,
n
){
return
e
+
22
+
75
*
(
26
>
e
)
-
((
0
!=
n
)
<<
5
)}
function
c
(
e
,
n
,
f
){
var
o
=
0
;
for
(
e
=
f
?
K
(
e
/
B
):
e
>>
1
,
e
+=
K
(
e
/
n
);
e
>
J
*
z
>>
1
;
o
+=
k
)
e
=
K
(
e
/
J
);
return
K
(
o
+
(
J
+
1
)
*
e
/
(
e
+
A
))}
function
y
(
e
){
var
n
,
f
,
o
,
d
,
t
,
l
,
s
,
p
,
y
,
m
,
r
=
[],
v
=
e
.
length
,
w
=
0
,
b
=
D
,
g
=
C
;
for
(
f
=
e
.
lastIndexOf
(
E
),
0
>
f
&&
(
f
=
0
),
o
=
0
;
f
>
o
;
++
o
)
e
.
charCodeAt
(
o
)
>=
128
&&
i
(
"not-basic"
),
r
.
push
(
e
.
charCodeAt
(
o
));
for
(
d
=
f
>
0
?
f
+
1
:
0
;
v
>
d
;){
for
(
t
=
w
,
l
=
1
,
s
=
k
;
d
>=
v
&&
i
(
"invalid-input"
),
p
=
a
(
e
.
charCodeAt
(
d
++
)),(
p
>=
k
||
p
>
K
((
j
-
w
)
/
l
))
&&
i
(
"overflow"
),
w
+=
p
*
l
,
y
=
g
>=
s
?
q
:
s
>=
g
+
z
?
z
:
s
-
g
,
!
(
y
>
p
);
s
+=
k
)
m
=
k
-
y
,
l
>
K
(
j
/
m
)
&&
i
(
"overflow"
),
l
*=
m
;
n
=
r
.
length
+
1
,
g
=
c
(
w
-
t
,
n
,
0
==
t
),
K
(
w
/
n
)
>
j
-
b
&&
i
(
"overflow"
),
b
+=
K
(
w
/
n
),
w
%=
n
,
r
.
splice
(
w
++
,
0
,
b
)}
return
u
(
r
)}
function
m
(
e
){
var
n
,
f
,
o
,
d
,
t
,
l
,
u
,
a
,
y
,
m
,
r
,
v
,
w
,
b
,
g
,
h
=
[];
for
(
e
=
s
(
e
),
v
=
e
.
length
,
n
=
D
,
f
=
0
,
t
=
C
,
l
=
0
;
v
>
l
;
++
l
)
r
=
e
[
l
],
128
>
r
&&
h
.
push
(
L
(
r
));
for
(
o
=
d
=
h
.
length
,
d
&&
h
.
push
(
E
);
v
>
o
;){
for
(
u
=
j
,
l
=
0
;
v
>
l
;
++
l
)
r
=
e
[
l
],
r
>=
n
&&
u
>
r
&&
(
u
=
r
);
for
(
w
=
o
+
1
,
u
-
n
>
K
((
j
-
f
)
/
w
)
&&
i
(
"overflow"
),
f
+=
(
u
-
n
)
*
w
,
n
=
u
,
l
=
0
;
v
>
l
;
++
l
)
if
(
r
=
e
[
l
],
n
>
r
&&++
f
>
j
&&
i
(
"overflow"
),
r
==
n
){
for
(
a
=
f
,
y
=
k
;
m
=
t
>=
y
?
q
:
y
>=
t
+
z
?
z
:
y
-
t
,
!
(
m
>
a
);
y
+=
k
)
g
=
a
-
m
,
b
=
k
-
m
,
h
.
push
(
L
(
p
(
m
+
g
%
b
,
0
))),
a
=
K
(
g
/
b
);
h
.
push
(
L
(
p
(
a
,
0
))),
t
=
c
(
f
,
w
,
o
==
d
),
f
=
0
,
++
o
}
++
f
,
++
n
}
return
h
.
join
(
""
)}
function
r
(
e
){
return
l
(
e
,
function
(
e
){
return
F
.
test
(
e
)?
y
(
e
.
slice
(
4
).
toLowerCase
()):
e
})}
function
v
(
e
){
return
l
(
e
,
function
(
e
){
return
G
.
test
(
e
)?
"xn--"
+
m
(
e
):
e
})}
var
w
=
"object"
==
typeof
o
&&
o
,
b
=
"object"
==
typeof
f
&&
f
&&
f
.
exports
==
w
&&
f
,
g
=
"object"
==
typeof
n
&&
n
;(
g
.
global
===
g
||
g
.
window
===
g
)
&&
(
d
=
g
);
var
h
,
x
,
j
=
2147483647
,
k
=
36
,
q
=
1
,
z
=
26
,
A
=
38
,
B
=
700
,
C
=
72
,
D
=
128
,
E
=
"-"
,
F
=
/^xn--/
,
G
=
/
[^
-~
]
/
,
H
=
/
\x
2E|
\u
3002|
\u
FF0E|
\u
FF61/g
,
I
=
{
overflow
:
"Overflow: input needs wider integers to process"
,
"not-basic"
:
"Illegal input >= 0x80 (not a basic code point)"
,
"invalid-input"
:
"Invalid input"
},
J
=
k
-
q
,
K
=
Math
.
floor
,
L
=
String
.
fromCharCode
;
if
(
h
=
{
version
:
"1.2.4"
,
ucs2
:{
decode
:
s
,
encode
:
u
},
decode
:
y
,
encode
:
m
,
toASCII
:
v
,
toUnicode
:
r
},
"function"
==
typeof
e
&&
"object"
==
typeof
e
.
amd
&&
e
.
amd
)
e
(
"punycode"
,
function
(){
return
h
});
else
if
(
w
&&!
w
.
nodeType
)
if
(
b
)
b
.
exports
=
h
;
else
for
(
x
in
h
)
h
.
hasOwnProperty
(
x
)
&&
(
w
[
x
]
=
h
[
x
]);
else
d
.
punycode
=
h
}(
this
)}).
call
(
this
,
"undefined"
!=
typeof
global
?
global
:
"undefined"
!=
typeof
self
?
self
:
"undefined"
!=
typeof
window
?
window
:{})},{}],
2
:[
function
(
e
,
n
){
function
f
(
e
,
n
,
f
){
!
e
.
defaultView
||
n
===
e
.
defaultView
.
pageXOffset
&&
f
===
e
.
defaultView
.
pageYOffset
||
e
.
defaultView
.
scrollTo
(
n
,
f
)}
function
o
(
e
,
n
){
try
{
n
&&
(
n
.
width
=
e
.
width
,
n
.
height
=
e
.
height
,
n
.
getContext
(
"2d"
).
putImageData
(
e
.
getContext
(
"2d"
).
getImageData
(
0
,
0
,
e
.
width
,
e
.
height
),
0
,
0
))}
catch
(
f
){
t
(
"Unable to copy canvas content from"
,
e
,
f
)}}
function
d
(
e
,
n
){
for
(
var
f
=
3
===
e
.
nodeType
?
document
.
createTextNode
(
e
.
nodeValue
):
e
.
cloneNode
(
!
1
),
i
=
e
.
firstChild
;
i
;)(
n
===!
0
||
1
!==
i
.
nodeType
||
"SCRIPT"
!==
i
.
nodeName
)
&&
f
.
appendChild
(
d
(
i
,
n
)),
i
=
i
.
nextSibling
;
return
1
===
e
.
nodeType
&&
(
f
.
_scrollTop
=
e
.
scrollTop
,
f
.
_scrollLeft
=
e
.
scrollLeft
,
"CANVAS"
===
e
.
nodeName
?
o
(
e
,
f
):(
"TEXTAREA"
===
e
.
nodeName
||
"SELECT"
===
e
.
nodeName
)
&&
(
f
.
value
=
e
.
value
)),
f
}
function
i
(
e
){
if
(
1
===
e
.
nodeType
){
e
.
scrollTop
=
e
.
_scrollTop
,
e
.
scrollLeft
=
e
.
_scrollLeft
;
for
(
var
n
=
e
.
firstChild
;
n
;)
i
(
n
),
n
=
n
.
nextSibling
}}
var
t
=
e
(
"./log"
);
n
.
exports
=
function
(
e
,
n
,
o
,
t
,
l
,
s
,
u
){
var
a
=
d
(
e
.
documentElement
,
l
.
javascriptEnabled
),
p
=
n
.
createElement
(
"iframe"
);
return
p
.
className
=
"html2canvas-container"
,
p
.
style
.
visibility
=
"hidden"
,
p
.
style
.
position
=
"fixed"
,
p
.
style
.
left
=
"-10000px"
,
p
.
style
.
top
=
"0px"
,
p
.
style
.
border
=
"0"
,
p
.
width
=
o
,
p
.
height
=
t
,
p
.
scrolling
=
"no"
,
n
.
body
.
appendChild
(
p
),
new
Promise
(
function
(
n
){
var
o
=
p
.
contentWindow
.
document
;
p
.
contentWindow
.
onload
=
p
.
onload
=
function
(){
var
e
=
setInterval
(
function
(){
o
.
body
.
childNodes
.
length
>
0
&&
(
i
(
o
.
documentElement
),
clearInterval
(
e
),
"view"
===
l
.
type
&&
(
p
.
contentWindow
.
scrollTo
(
s
,
u
),
!
/
(
iPad|iPhone|iPod
)
/g
.
test
(
navigator
.
userAgent
)
||
p
.
contentWindow
.
scrollY
===
u
&&
p
.
contentWindow
.
scrollX
===
s
||
(
o
.
documentElement
.
style
.
top
=-
u
+
"px"
,
o
.
documentElement
.
style
.
left
=-
s
+
"px"
,
o
.
documentElement
.
style
.
position
=
"absolute"
)),
n
(
p
))},
50
)},
o
.
open
(),
o
.
write
(
"<!DOCTYPE html><html></html>"
),
f
(
e
,
s
,
u
),
o
.
replaceChild
(
o
.
adoptNode
(
a
),
o
.
documentElement
),
o
.
close
()})}},{
"./log"
:
13
}],
3
:[
function
(
e
,
n
){
function
f
(
e
){
this
.
r
=
0
,
this
.
g
=
0
,
this
.
b
=
0
,
this
.
a
=
null
;
this
.
fromArray
(
e
)
||
this
.
namedColor
(
e
)
||
this
.
rgb
(
e
)
||
this
.
rgba
(
e
)
||
this
.
hex6
(
e
)
||
this
.
hex3
(
e
)}
f
.
prototype
.
darken
=
function
(
e
){
var
n
=
1
-
e
;
return
new
f
([
Math
.
round
(
this
.
r
*
n
),
Math
.
round
(
this
.
g
*
n
),
Math
.
round
(
this
.
b
*
n
),
this
.
a
])},
f
.
prototype
.
isTransparent
=
function
(){
return
0
===
this
.
a
},
f
.
prototype
.
isBlack
=
function
(){
return
0
===
this
.
r
&&
0
===
this
.
g
&&
0
===
this
.
b
},
f
.
prototype
.
fromArray
=
function
(
e
){
return
Array
.
isArray
(
e
)
&&
(
this
.
r
=
Math
.
min
(
e
[
0
],
255
),
this
.
g
=
Math
.
min
(
e
[
1
],
255
),
this
.
b
=
Math
.
min
(
e
[
2
],
255
),
e
.
length
>
3
&&
(
this
.
a
=
e
[
3
])),
Array
.
isArray
(
e
)};
var
o
=
/^#
([
a-f0-9
]{3})
$/i
;
f
.
prototype
.
hex3
=
function
(
e
){
var
n
=
null
;
return
null
!==
(
n
=
e
.
match
(
o
))
&&
(
this
.
r
=
parseInt
(
n
[
1
][
0
]
+
n
[
1
][
0
],
16
),
this
.
g
=
parseInt
(
n
[
1
][
1
]
+
n
[
1
][
1
],
16
),
this
.
b
=
parseInt
(
n
[
1
][
2
]
+
n
[
1
][
2
],
16
)),
null
!==
n
};
var
d
=
/^#
([
a-f0-9
]{6})
$/i
;
f
.
prototype
.
hex6
=
function
(
e
){
var
n
=
null
;
return
null
!==
(
n
=
e
.
match
(
d
))
&&
(
this
.
r
=
parseInt
(
n
[
1
].
substring
(
0
,
2
),
16
),
this
.
g
=
parseInt
(
n
[
1
].
substring
(
2
,
4
),
16
),
this
.
b
=
parseInt
(
n
[
1
].
substring
(
4
,
6
),
16
)),
null
!==
n
};
var
i
=
/^rgb
\(\s
*
(\d{1,3})\s
*,
\s
*
(\d{1,3})\s
*,
\s
*
(\d{1,3})\s
*
\)
$/
;
f
.
prototype
.
rgb
=
function
(
e
){
var
n
=
null
;
return
null
!==
(
n
=
e
.
match
(
i
))
&&
(
this
.
r
=
Number
(
n
[
1
]),
this
.
g
=
Number
(
n
[
2
]),
this
.
b
=
Number
(
n
[
3
])),
null
!==
n
};
var
t
=
/^rgba
\(\s
*
(\d{1,3})\s
*,
\s
*
(\d{1,3})\s
*,
\s
*
(\d{1,3})\s
*,
\s
*
(\d?\.?\d
+
)\s
*
\)
$/
;
f
.
prototype
.
rgba
=
function
(
e
){
var
n
=
null
;
return
null
!==
(
n
=
e
.
match
(
t
))
&&
(
this
.
r
=
Number
(
n
[
1
]),
this
.
g
=
Number
(
n
[
2
]),
this
.
b
=
Number
(
n
[
3
]),
this
.
a
=
Number
(
n
[
4
])),
null
!==
n
},
f
.
prototype
.
toString
=
function
(){
return
null
!==
this
.
a
&&
1
!==
this
.
a
?
"rgba("
+
[
this
.
r
,
this
.
g
,
this
.
b
,
this
.
a
].
join
(
","
)
+
")"
:
"rgb("
+
[
this
.
r
,
this
.
g
,
this
.
b
].
join
(
","
)
+
")"
},
f
.
prototype
.
namedColor
=
function
(
e
){
e
=
e
.
toLowerCase
();
var
n
=
l
[
e
];
if
(
n
)
this
.
r
=
n
[
0
],
this
.
g
=
n
[
1
],
this
.
b
=
n
[
2
];
else
if
(
"transparent"
===
e
)
return
this
.
r
=
this
.
g
=
this
.
b
=
this
.
a
=
0
,
!
0
;
return
!!
n
},
f
.
prototype
.
isColor
=!
0
;
var
l
=
{
aliceblue
:[
240
,
248
,
255
],
antiquewhite
:[
250
,
235
,
215
],
aqua
:[
0
,
255
,
255
],
aquamarine
:[
127
,
255
,
212
],
azure
:[
240
,
255
,
255
],
beige
:[
245
,
245
,
220
],
bisque
:[
255
,
228
,
196
],
black
:[
0
,
0
,
0
],
blanchedalmond
:[
255
,
235
,
205
],
blue
:[
0
,
0
,
255
],
blueviolet
:[
138
,
43
,
226
],
brown
:[
165
,
42
,
42
],
burlywood
:[
222
,
184
,
135
],
cadetblue
:[
95
,
158
,
160
],
chartreuse
:[
127
,
255
,
0
],
chocolate
:[
210
,
105
,
30
],
coral
:[
255
,
127
,
80
],
cornflowerblue
:[
100
,
149
,
237
],
cornsilk
:[
255
,
248
,
220
],
crimson
:[
220
,
20
,
60
],
cyan
:[
0
,
255
,
255
],
darkblue
:[
0
,
0
,
139
],
darkcyan
:[
0
,
139
,
139
],
darkgoldenrod
:[
184
,
134
,
11
],
darkgray
:[
169
,
169
,
169
],
darkgreen
:[
0
,
100
,
0
],
darkgrey
:[
169
,
169
,
169
],
darkkhaki
:[
189
,
183
,
107
],
darkmagenta
:[
139
,
0
,
139
],
darkolivegreen
:[
85
,
107
,
47
],
darkorange
:[
255
,
140
,
0
],
darkorchid
:[
153
,
50
,
204
],
darkred
:[
139
,
0
,
0
],
darksalmon
:[
233
,
150
,
122
],
darkseagreen
:[
143
,
188
,
143
],
darkslateblue
:[
72
,
61
,
139
],
darkslategray
:[
47
,
79
,
79
],
darkslategrey
:[
47
,
79
,
79
],
darkturquoise
:[
0
,
206
,
209
],
darkviolet
:[
148
,
0
,
211
],
deeppink
:[
255
,
20
,
147
],
deepskyblue
:[
0
,
191
,
255
],
dimgray
:[
105
,
105
,
105
],
dimgrey
:[
105
,
105
,
105
],
dodgerblue
:[
30
,
144
,
255
],
firebrick
:[
178
,
34
,
34
],
floralwhite
:[
255
,
250
,
240
],
forestgreen
:[
34
,
139
,
34
],
fuchsia
:[
255
,
0
,
255
],
gainsboro
:[
220
,
220
,
220
],
ghostwhite
:[
248
,
248
,
255
],
gold
:[
255
,
215
,
0
],
goldenrod
:[
218
,
165
,
32
],
gray
:[
128
,
128
,
128
],
green
:[
0
,
128
,
0
],
greenyellow
:[
173
,
255
,
47
],
grey
:[
128
,
128
,
128
],
honeydew
:[
240
,
255
,
240
],
hotpink
:[
255
,
105
,
180
],
indianred
:[
205
,
92
,
92
],
indigo
:[
75
,
0
,
130
],
ivory
:[
255
,
255
,
240
],
khaki
:[
240
,
230
,
140
],
lavender
:[
230
,
230
,
250
],
lavenderblush
:[
255
,
240
,
245
],
lawngreen
:[
124
,
252
,
0
],
lemonchiffon
:[
255
,
250
,
205
],
lightblue
:[
173
,
216
,
230
],
lightcoral
:[
240
,
128
,
128
],
lightcyan
:[
224
,
255
,
255
],
lightgoldenrodyellow
:[
250
,
250
,
210
],
lightgray
:[
211
,
211
,
211
],
lightgreen
:[
144
,
238
,
144
],
lightgrey
:[
211
,
211
,
211
],
lightpink
:[
255
,
182
,
193
],
lightsalmon
:[
255
,
160
,
122
],
lightseagreen
:[
32
,
178
,
170
],
lightskyblue
:[
135
,
206
,
250
],
lightslategray
:[
119
,
136
,
153
],
lightslategrey
:[
119
,
136
,
153
],
lightsteelblue
:[
176
,
196
,
222
],
lightyellow
:[
255
,
255
,
224
],
lime
:[
0
,
255
,
0
],
limegreen
:[
50
,
205
,
50
],
linen
:[
250
,
240
,
230
],
magenta
:[
255
,
0
,
255
],
maroon
:[
128
,
0
,
0
],
mediumaquamarine
:[
102
,
205
,
170
],
mediumblue
:[
0
,
0
,
205
],
mediumorchid
:[
186
,
85
,
211
],
mediumpurple
:[
147
,
112
,
219
],
mediumseagreen
:[
60
,
179
,
113
],
mediumslateblue
:[
123
,
104
,
238
],
mediumspringgreen
:[
0
,
250
,
154
],
mediumturquoise
:[
72
,
209
,
204
],
mediumvioletred
:[
199
,
21
,
133
],
midnightblue
:[
25
,
25
,
112
],
mintcream
:[
245
,
255
,
250
],
mistyrose
:[
255
,
228
,
225
],
moccasin
:[
255
,
228
,
181
],
navajowhite
:[
255
,
222
,
173
],
navy
:[
0
,
0
,
128
],
oldlace
:[
253
,
245
,
230
],
olive
:[
128
,
128
,
0
],
olivedrab
:[
107
,
142
,
35
],
orange
:[
255
,
165
,
0
],
orangered
:[
255
,
69
,
0
],
orchid
:[
218
,
112
,
214
],
palegoldenrod
:[
238
,
232
,
170
],
palegreen
:[
152
,
251
,
152
],
paleturquoise
:[
175
,
238
,
238
],
palevioletred
:[
219
,
112
,
147
],
papayawhip
:[
255
,
239
,
213
],
peachpuff
:[
255
,
218
,
185
],
peru
:[
205
,
133
,
63
],
pink
:[
255
,
192
,
203
],
plum
:[
221
,
160
,
221
],
powderblue
:[
176
,
224
,
230
],
purple
:[
128
,
0
,
128
],
rebeccapurple
:[
102
,
51
,
153
],
red
:[
255
,
0
,
0
],
rosybrown
:[
188
,
143
,
143
],
royalblue
:[
65
,
105
,
225
],
saddlebrown
:[
139
,
69
,
19
],
salmon
:[
250
,
128
,
114
],
sandybrown
:[
244
,
164
,
96
],
seagreen
:[
46
,
139
,
87
],
seashell
:[
255
,
245
,
238
],
sienna
:[
160
,
82
,
45
],
silver
:[
192
,
192
,
192
],
skyblue
:[
135
,
206
,
235
],
slateblue
:[
106
,
90
,
205
],
slategray
:[
112
,
128
,
144
],
slategrey
:[
112
,
128
,
144
],
snow
:[
255
,
250
,
250
],
springgreen
:[
0
,
255
,
127
],
steelblue
:[
70
,
130
,
180
],
tan
:[
210
,
180
,
140
],
teal
:[
0
,
128
,
128
],
thistle
:[
216
,
191
,
216
],
tomato
:[
255
,
99
,
71
],
turquoise
:[
64
,
224
,
208
],
violet
:[
238
,
130
,
238
],
wheat
:[
245
,
222
,
179
],
white
:[
255
,
255
,
255
],
whitesmoke
:[
245
,
245
,
245
],
yellow
:[
255
,
255
,
0
],
yellowgreen
:[
154
,
205
,
50
]};
n
.
exports
=
f
},{}],
4
:[
function
(
n
,
f
){
function
o
(
e
,
n
){
var
f
=
j
++
;
if
(
n
=
n
||
{},
n
.
logging
&&
(
v
.
options
.
logging
=!
0
,
v
.
options
.
start
=
Date
.
now
()),
n
.
async
=
"undefined"
==
typeof
n
.
async
?
!
0
:
n
.
async
,
n
.
allowTaint
=
"undefined"
==
typeof
n
.
allowTaint
?
!
1
:
n
.
allowTaint
,
n
.
removeContainer
=
"undefined"
==
typeof
n
.
removeContainer
?
!
0
:
n
.
removeContainer
,
n
.
javascriptEnabled
=
"undefined"
==
typeof
n
.
javascriptEnabled
?
!
1
:
n
.
javascriptEnabled
,
n
.
imageTimeout
=
"undefined"
==
typeof
n
.
imageTimeout
?
1
e4
:
n
.
imageTimeout
,
n
.
renderer
=
"function"
==
typeof
n
.
renderer
?
n
.
renderer
:
c
,
n
.
strict
=!!
n
.
strict
,
"string"
==
typeof
e
){
if
(
"string"
!=
typeof
n
.
proxy
)
return
Promise
.
reject
(
"Proxy must be used when rendering url"
);
var
o
=
null
!=
n
.
width
?
n
.
width
:
window
.
innerWidth
,
t
=
null
!=
n
.
height
?
n
.
height
:
window
.
innerHeight
;
return
g
(
a
(
e
),
n
.
proxy
,
document
,
o
,
t
,
n
).
then
(
function
(
e
){
return
i
(
e
.
contentWindow
.
document
.
documentElement
,
e
,
n
,
o
,
t
)})}
var
l
=
(
void
0
===
e
?[
document
.
documentElement
]:
e
.
length
?
e
:[
e
])[
0
];
return
l
.
setAttribute
(
x
+
f
,
f
),
d
(
l
.
ownerDocument
,
n
,
l
.
ownerDocument
.
defaultView
.
innerWidth
,
l
.
ownerDocument
.
defaultView
.
innerHeight
,
f
).
then
(
function
(
e
){
return
"function"
==
typeof
n
.
onrendered
&&
(
v
(
"options.onrendered is deprecated, html2canvas returns a Promise containing the canvas"
),
n
.
onrendered
(
e
)),
e
})}
function
d
(
e
,
n
,
f
,
o
,
d
){
return
b
(
e
,
e
,
f
,
o
,
n
,
e
.
defaultView
.
pageXOffset
,
e
.
defaultView
.
pageYOffset
).
then
(
function
(
t
){
v
(
"Document cloned"
);
var
l
=
x
+
d
,
s
=
"["
+
l
+
"='"
+
d
+
"']"
;
e
.
querySelector
(
s
).
removeAttribute
(
l
);
var
u
=
t
.
contentWindow
,
a
=
u
.
document
.
querySelector
(
s
),
p
=
Promise
.
resolve
(
"function"
==
typeof
n
.
onclone
?
n
.
onclone
(
u
.
document
):
!
0
);
return
p
.
then
(
function
(){
return
i
(
a
,
t
,
n
,
f
,
o
)})})}
function
i
(
e
,
n
,
f
,
o
,
d
){
var
i
=
n
.
contentWindow
,
a
=
new
p
(
i
.
document
),
c
=
new
y
(
f
,
a
),
r
=
h
(
e
),
w
=
"view"
===
f
.
type
?
o
:
s
(
i
.
document
),
b
=
"view"
===
f
.
type
?
d
:
u
(
i
.
document
),
g
=
new
f
.
renderer
(
w
,
b
,
c
,
f
,
document
),
x
=
new
m
(
e
,
g
,
a
,
c
,
f
);
return
x
.
ready
.
then
(
function
(){
v
(
"Finished rendering"
);
var
o
;
return
o
=
"view"
===
f
.
type
?
l
(
g
.
canvas
,{
width
:
g
.
canvas
.
width
,
height
:
g
.
canvas
.
height
,
top
:
0
,
left
:
0
,
x
:
0
,
y
:
0
}):
e
===
i
.
document
.
body
||
e
===
i
.
document
.
documentElement
||
null
!=
f
.
canvas
?
g
.
canvas
:
l
(
g
.
canvas
,{
width
:
null
!=
f
.
width
?
f
.
width
:
r
.
width
,
height
:
null
!=
f
.
height
?
f
.
height
:
r
.
height
,
top
:
r
.
top
,
left
:
r
.
left
,
x
:
0
,
y
:
0
}),
t
(
n
,
f
),
o
})}
function
t
(
e
,
n
){
n
.
removeContainer
&&
(
e
.
parentNode
.
removeChild
(
e
),
v
(
"Cleaned up container"
))}
function
l
(
e
,
n
){
var
f
=
document
.
createElement
(
"canvas"
),
o
=
Math
.
min
(
e
.
width
-
1
,
Math
.
max
(
0
,
n
.
left
)),
d
=
Math
.
min
(
e
.
width
,
Math
.
max
(
1
,
n
.
left
+
n
.
width
)),
i
=
Math
.
min
(
e
.
height
-
1
,
Math
.
max
(
0
,
n
.
top
)),
t
=
Math
.
min
(
e
.
height
,
Math
.
max
(
1
,
n
.
top
+
n
.
height
));
f
.
width
=
n
.
width
,
f
.
height
=
n
.
height
;
var
l
=
d
-
o
,
s
=
t
-
i
;
return
v
(
"Cropping canvas at:"
,
"left:"
,
n
.
left
,
"top:"
,
n
.
top
,
"width:"
,
l
,
"height:"
,
s
),
v
(
"Resulting crop with width"
,
n
.
width
,
"and height"
,
n
.
height
,
"with x"
,
o
,
"and y"
,
i
),
f
.
getContext
(
"2d"
).
drawImage
(
e
,
o
,
i
,
l
,
s
,
n
.
x
,
n
.
y
,
l
,
s
),
f
}
function
s
(
e
){
return
Math
.
max
(
Math
.
max
(
e
.
body
.
scrollWidth
,
e
.
documentElement
.
scrollWidth
),
Math
.
max
(
e
.
body
.
offsetWidth
,
e
.
documentElement
.
offsetWidth
),
Math
.
max
(
e
.
body
.
clientWidth
,
e
.
documentElement
.
clientWidth
))}
function
u
(
e
){
return
Math
.
max
(
Math
.
max
(
e
.
body
.
scrollHeight
,
e
.
documentElement
.
scrollHeight
),
Math
.
max
(
e
.
body
.
offsetHeight
,
e
.
documentElement
.
offsetHeight
),
Math
.
max
(
e
.
body
.
clientHeight
,
e
.
documentElement
.
clientHeight
))}
function
a
(
e
){
var
n
=
document
.
createElement
(
"a"
);
return
n
.
href
=
e
,
n
.
href
=
n
.
href
,
n
}
var
p
=
n
(
"./support"
),
c
=
n
(
"./renderers/canvas"
),
y
=
n
(
"./imageloader"
),
m
=
n
(
"./nodeparser"
),
r
=
n
(
"./nodecontainer"
),
v
=
n
(
"./log"
),
w
=
n
(
"./utils"
),
b
=
n
(
"./clone"
),
g
=
n
(
"./proxy"
).
loadUrlDocument
,
h
=
w
.
getBounds
,
x
=
"data-html2canvas-node"
,
j
=
0
;
o
.
CanvasRenderer
=
c
,
o
.
NodeContainer
=
r
,
o
.
log
=
v
,
o
.
utils
=
w
;
var
k
=
"undefined"
==
typeof
document
||
"function"
!=
typeof
Object
.
create
||
"function"
!=
typeof
document
.
createElement
(
"canvas"
).
getContext
?
function
(){
return
Promise
.
reject
(
"No canvas support"
)}:
o
;
f
.
exports
=
k
,
"function"
==
typeof
e
&&
e
.
amd
&&
e
(
"html2canvas"
,[],
function
(){
return
k
})},{
"./clone"
:
2
,
"./imageloader"
:
11
,
"./log"
:
13
,
"./nodecontainer"
:
14
,
"./nodeparser"
:
15
,
"./proxy"
:
16
,
"./renderers/canvas"
:
20
,
"./support"
:
22
,
"./utils"
:
26
}],
5
:[
function
(
e
,
n
){
function
f
(
e
){
if
(
this
.
src
=
e
,
o
(
"DummyImageContainer for"
,
e
),
!
this
.
promise
||!
this
.
image
){
o
(
"Initiating DummyImageContainer"
),
f
.
prototype
.
image
=
new
Image
;
var
n
=
this
.
image
;
f
.
prototype
.
promise
=
new
Promise
(
function
(
e
,
f
){
n
.
onload
=
e
,
n
.
onerror
=
f
,
n
.
src
=
d
(),
n
.
complete
===!
0
&&
e
(
n
)})}}
var
o
=
e
(
"./log"
),
d
=
e
(
"./utils"
).
smallImage
;
n
.
exports
=
f
},{
"./log"
:
13
,
"./utils"
:
26
}],
6
:[
function
(
e
,
n
){
function
f
(
e
,
n
){
var
f
,
d
,
i
=
document
.
createElement
(
"div"
),
t
=
document
.
createElement
(
"img"
),
l
=
document
.
createElement
(
"span"
),
s
=
"Hidden Text"
;
i
.
style
.
visibility
=
"hidden"
,
i
.
style
.
fontFamily
=
e
,
i
.
style
.
fontSize
=
n
,
i
.
style
.
margin
=
0
,
i
.
style
.
padding
=
0
,
document
.
body
.
appendChild
(
i
),
t
.
src
=
o
(),
t
.
width
=
1
,
t
.
height
=
1
,
t
.
style
.
margin
=
0
,
t
.
style
.
padding
=
0
,
t
.
style
.
verticalAlign
=
"baseline"
,
l
.
style
.
fontFamily
=
e
,
l
.
style
.
fontSize
=
n
,
l
.
style
.
margin
=
0
,
l
.
style
.
padding
=
0
,
l
.
appendChild
(
document
.
createTextNode
(
s
)),
i
.
appendChild
(
l
),
i
.
appendChild
(
t
),
f
=
t
.
offsetTop
-
l
.
offsetTop
+
1
,
i
.
removeChild
(
l
),
i
.
appendChild
(
document
.
createTextNode
(
s
)),
i
.
style
.
lineHeight
=
"normal"
,
t
.
style
.
verticalAlign
=
"super"
,
d
=
t
.
offsetTop
-
i
.
offsetTop
+
1
,
document
.
body
.
removeChild
(
i
),
this
.
baseline
=
f
,
this
.
lineWidth
=
1
,
this
.
middle
=
d
}
var
o
=
e
(
"./utils"
).
smallImage
;
n
.
exports
=
f
},{
"./utils"
:
26
}],
7
:[
function
(
e
,
n
){
function
f
(){
this
.
data
=
{}}
var
o
=
e
(
"./font"
);
f
.
prototype
.
getMetrics
=
function
(
e
,
n
){
return
void
0
===
this
.
data
[
e
+
"-"
+
n
]
&&
(
this
.
data
[
e
+
"-"
+
n
]
=
new
o
(
e
,
n
)),
this
.
data
[
e
+
"-"
+
n
]},
n
.
exports
=
f
},{
"./font"
:
6
}],
8
:[
function
(
e
,
n
){
function
f
(
n
,
f
,
o
){
this
.
image
=
null
,
this
.
src
=
n
;
var
i
=
this
,
t
=
d
(
n
);
this
.
promise
=
(
f
?
new
Promise
(
function
(
e
){
"about:blank"
===
n
.
contentWindow
.
document
.
URL
||
null
==
n
.
contentWindow
.
document
.
documentElement
?
n
.
contentWindow
.
onload
=
n
.
onload
=
function
(){
e
(
n
)}:
e
(
n
)}):
this
.
proxyLoad
(
o
.
proxy
,
t
,
o
)).
then
(
function
(
n
){
var
f
=
e
(
"./core"
);
return
f
(
n
.
contentWindow
.
document
.
documentElement
,{
type
:
"view"
,
width
:
n
.
width
,
height
:
n
.
height
,
proxy
:
o
.
proxy
,
javascriptEnabled
:
o
.
javascriptEnabled
,
removeContainer
:
o
.
removeContainer
,
allowTaint
:
o
.
allowTaint
,
imageTimeout
:
o
.
imageTimeout
/
2
})}).
then
(
function
(
e
){
return
i
.
image
=
e
})}
var
o
=
e
(
"./utils"
),
d
=
o
.
getBounds
,
i
=
e
(
"./proxy"
).
loadUrlDocument
;
f
.
prototype
.
proxyLoad
=
function
(
e
,
n
,
f
){
var
o
=
this
.
src
;
return
i
(
o
.
src
,
e
,
o
.
ownerDocument
,
n
.
width
,
n
.
height
,
f
)},
n
.
exports
=
f
},{
"./core"
:
4
,
"./proxy"
:
16
,
"./utils"
:
26
}],
9
:[
function
(
e
,
n
){
function
f
(
e
){
this
.
src
=
e
.
value
,
this
.
colorStops
=
[],
this
.
type
=
null
,
this
.
x0
=
.
5
,
this
.
y0
=
.
5
,
this
.
x1
=
.
5
,
this
.
y1
=
.
5
,
this
.
promise
=
Promise
.
resolve
(
!
0
)}
f
.
TYPES
=
{
LINEAR
:
1
,
RADIAL
:
2
},
f
.
REGEXP_COLORSTOP
=
/^
\s
*
(
rgba
?\(\s
*
\d{1,3}
,
\s
*
\d{1,3}
,
\s
*
\d{1,3}(?:
,
\s
*
[
0-9
\.]
+
)?\s
*
\)
|
[
a-z
]{3,20}
|#
[
a-f0-9
]{3,6})(?:\s
+
(\d{1,3}(?:\.\d
+
)?)(
%|px
)?)?(?:\s
|$
)
/i
,
n
.
exports
=
f
},{}],
10
:[
function
(
e
,
n
){
function
f
(
e
,
n
){
this
.
src
=
e
,
this
.
image
=
new
Image
;
var
f
=
this
;
this
.
tainted
=
null
,
this
.
promise
=
new
Promise
(
function
(
o
,
d
){
f
.
image
.
onload
=
o
,
f
.
image
.
onerror
=
d
,
n
&&
(
f
.
image
.
crossOrigin
=
"anonymous"
),
f
.
image
.
src
=
e
,
f
.
image
.
complete
===!
0
&&
o
(
f
.
image
)})}
n
.
exports
=
f
},{}],
11
:[
function
(
e
,
n
){
function
f
(
e
,
n
){
this
.
link
=
null
,
this
.
options
=
e
,
this
.
support
=
n
,
this
.
origin
=
this
.
getOrigin
(
window
.
location
.
href
)}
var
o
=
e
(
"./log"
),
d
=
e
(
"./imagecontainer"
),
i
=
e
(
"./dummyimagecontainer"
),
t
=
e
(
"./proxyimagecontainer"
),
l
=
e
(
"./framecontainer"
),
s
=
e
(
"./svgcontainer"
),
u
=
e
(
"./svgnodecontainer"
),
a
=
e
(
"./lineargradientcontainer"
),
p
=
e
(
"./webkitgradientcontainer"
),
c
=
e
(
"./utils"
).
bind
;
f
.
prototype
.
findImages
=
function
(
e
){
var
n
=
[];
return
e
.
reduce
(
function
(
e
,
n
){
switch
(
n
.
node
.
nodeName
){
case
"IMG"
:
return
e
.
concat
([{
args
:[
n
.
node
.
src
],
method
:
"url"
}]);
case
"svg"
:
case
"IFRAME"
:
return
e
.
concat
([{
args
:[
n
.
node
],
method
:
n
.
node
.
nodeName
}])}
return
e
},[]).
forEach
(
this
.
addImage
(
n
,
this
.
loadImage
),
this
),
n
},
f
.
prototype
.
findBackgroundImage
=
function
(
e
,
n
){
return
n
.
parseBackgroundImages
().
filter
(
this
.
hasImageBackground
).
forEach
(
this
.
addImage
(
e
,
this
.
loadImage
),
this
),
e
},
f
.
prototype
.
addImage
=
function
(
e
,
n
){
return
function
(
f
){
f
.
args
.
forEach
(
function
(
d
){
this
.
imageExists
(
e
,
d
)
||
(
e
.
splice
(
0
,
0
,
n
.
call
(
this
,
f
)),
o
(
"Added image #"
+
e
.
length
,
"string"
==
typeof
d
?
d
.
substring
(
0
,
100
):
d
))},
this
)}},
f
.
prototype
.
hasImageBackground
=
function
(
e
){
return
"none"
!==
e
.
method
},
f
.
prototype
.
loadImage
=
function
(
e
){
if
(
"url"
===
e
.
method
){
var
n
=
e
.
args
[
0
];
return
!
this
.
isSVG
(
n
)
||
this
.
support
.
svg
||
this
.
options
.
allowTaint
?
n
.
match
(
/data:image
\/
.*;base64,/i
)?
new
d
(
n
.
replace
(
/url
\([
'"
]{0,}
|
[
'"
]{0,}\)
$/gi
,
""
),
!
1
):
this
.
isSameOrigin
(
n
)
||
this
.
options
.
allowTaint
===!
0
||
this
.
isSVG
(
n
)?
new
d
(
n
,
!
1
):
this
.
support
.
cors
&&!
this
.
options
.
allowTaint
&&
this
.
options
.
useCORS
?
new
d
(
n
,
!
0
):
this
.
options
.
proxy
?
new
t
(
n
,
this
.
options
.
proxy
):
new
i
(
n
):
new
s
(
n
)}
return
"linear-gradient"
===
e
.
method
?
new
a
(
e
):
"gradient"
===
e
.
method
?
new
p
(
e
):
"svg"
===
e
.
method
?
new
u
(
e
.
args
[
0
],
this
.
support
.
svg
):
"IFRAME"
===
e
.
method
?
new
l
(
e
.
args
[
0
],
this
.
isSameOrigin
(
e
.
args
[
0
].
src
),
this
.
options
):
new
i
(
e
)},
f
.
prototype
.
isSVG
=
function
(
e
){
return
"svg"
===
e
.
substring
(
e
.
length
-
3
).
toLowerCase
()
||
s
.
prototype
.
isInline
(
e
)},
f
.
prototype
.
imageExists
=
function
(
e
,
n
){
return
e
.
some
(
function
(
e
){
return
e
.
src
===
n
})},
f
.
prototype
.
isSameOrigin
=
function
(
e
){
return
this
.
getOrigin
(
e
)
===
this
.
origin
},
f
.
prototype
.
getOrigin
=
function
(
e
){
var
n
=
this
.
link
||
(
this
.
link
=
document
.
createElement
(
"a"
));
return
n
.
href
=
e
,
n
.
href
=
n
.
href
,
n
.
protocol
+
n
.
hostname
+
n
.
port
},
f
.
prototype
.
getPromise
=
function
(
e
){
return
this
.
timeout
(
e
,
this
.
options
.
imageTimeout
)[
"catch"
](
function
(){
var
n
=
new
i
(
e
.
src
);
return
n
.
promise
.
then
(
function
(
n
){
e
.
image
=
n
})})},
f
.
prototype
.
get
=
function
(
e
){
var
n
=
null
;
return
this
.
images
.
some
(
function
(
f
){
return
(
n
=
f
).
src
===
e
})?
n
:
null
},
f
.
prototype
.
fetch
=
function
(
e
){
return
this
.
images
=
e
.
reduce
(
c
(
this
.
findBackgroundImage
,
this
),
this
.
findImages
(
e
)),
this
.
images
.
forEach
(
function
(
e
,
n
){
e
.
promise
.
then
(
function
(){
o
(
"Succesfully loaded image #"
+
(
n
+
1
),
e
)},
function
(
f
){
o
(
"Failed loading image #"
+
(
n
+
1
),
e
,
f
)})}),
this
.
ready
=
Promise
.
all
(
this
.
images
.
map
(
this
.
getPromise
,
this
)),
o
(
"Finished searching images"
),
this
},
f
.
prototype
.
timeout
=
function
(
e
,
n
){
var
f
,
d
=
Promise
.
race
([
e
.
promise
,
new
Promise
(
function
(
d
,
i
){
f
=
setTimeout
(
function
(){
o
(
"Timed out loading image"
,
e
),
i
(
e
)},
n
)})]).
then
(
function
(
e
){
return
clearTimeout
(
f
),
e
});
return
d
[
"catch"
](
function
(){
clearTimeout
(
f
)}),
d
},
n
.
exports
=
f
},{
"./dummyimagecontainer"
:
5
,
"./framecontainer"
:
8
,
"./imagecontainer"
:
10
,
"./lineargradientcontainer"
:
12
,
"./log"
:
13
,
"./proxyimagecontainer"
:
17
,
"./svgcontainer"
:
23
,
"./svgnodecontainer"
:
24
,
"./utils"
:
26
,
"./webkitgradientcontainer"
:
27
}],
12
:[
function
(
e
,
n
){
function
f
(
e
){
o
.
apply
(
this
,
arguments
),
this
.
type
=
o
.
TYPES
.
LINEAR
;
var
n
=
f
.
REGEXP_DIRECTION
.
test
(
e
.
args
[
0
])
||!
o
.
REGEXP_COLORSTOP
.
test
(
e
.
args
[
0
]);
n
?
e
.
args
[
0
].
split
(
/
\s
+/
).
reverse
().
forEach
(
function
(
e
,
n
){
switch
(
e
){
case
"left"
:
this
.
x0
=
0
,
this
.
x1
=
1
;
break
;
case
"top"
:
this
.
y0
=
0
,
this
.
y1
=
1
;
break
;
case
"right"
:
this
.
x0
=
1
,
this
.
x1
=
0
;
break
;
case
"bottom"
:
this
.
y0
=
1
,
this
.
y1
=
0
;
break
;
case
"to"
:
var
f
=
this
.
y0
,
o
=
this
.
x0
;
this
.
y0
=
this
.
y1
,
this
.
x0
=
this
.
x1
,
this
.
x1
=
o
,
this
.
y1
=
f
;
break
;
case
"center"
:
break
;
default
:
var
d
=
.
01
*
parseFloat
(
e
,
10
);
if
(
isNaN
(
d
))
break
;
0
===
n
?(
this
.
y0
=
d
,
this
.
y1
=
1
-
this
.
y0
):(
this
.
x0
=
d
,
this
.
x1
=
1
-
this
.
x0
)}},
this
):(
this
.
y0
=
0
,
this
.
y1
=
1
),
this
.
colorStops
=
e
.
args
.
slice
(
n
?
1
:
0
).
map
(
function
(
e
){
var
n
=
e
.
match
(
o
.
REGEXP_COLORSTOP
),
f
=+
n
[
2
],
i
=
0
===
f
?
"%"
:
n
[
3
];
return
{
color
:
new
d
(
n
[
1
]),
stop
:
"%"
===
i
?
f
/
100
:
null
}}),
null
===
this
.
colorStops
[
0
].
stop
&&
(
this
.
colorStops
[
0
].
stop
=
0
),
null
===
this
.
colorStops
[
this
.
colorStops
.
length
-
1
].
stop
&&
(
this
.
colorStops
[
this
.
colorStops
.
length
-
1
].
stop
=
1
),
this
.
colorStops
.
forEach
(
function
(
e
,
n
){
null
===
e
.
stop
&&
this
.
colorStops
.
slice
(
n
).
some
(
function
(
f
,
o
){
return
null
!==
f
.
stop
?(
e
.
stop
=
(
f
.
stop
-
this
.
colorStops
[
n
-
1
].
stop
)
/
(
o
+
1
)
+
this
.
colorStops
[
n
-
1
].
stop
,
!
0
):
!
1
},
this
)},
this
)}
var
o
=
e
(
"./gradientcontainer"
),
d
=
e
(
"./color"
);
f
.
prototype
=
Object
.
create
(
o
.
prototype
),
f
.
REGEXP_DIRECTION
=
/^
\s
*
(?:
to|left|right|top|bottom|center|
\d{1,3}(?:\.\d
+
)?
%
?)(?:\s
|$
)
/i
,
n
.
exports
=
f
},{
"./color"
:
3
,
"./gradientcontainer"
:
9
}],
13
:[
function
(
e
,
n
){
var
f
=
function
(){
f
.
options
.
logging
&&
window
.
console
&&
window
.
console
.
log
&&
Function
.
prototype
.
bind
.
call
(
window
.
console
.
log
,
window
.
console
).
apply
(
window
.
console
,[
Date
.
now
()
-
f
.
options
.
start
+
"ms"
,
"html2canvas:"
].
concat
([].
slice
.
call
(
arguments
,
0
)))};
f
.
options
=
{
logging
:
!
1
},
n
.
exports
=
f
},{}],
14
:[
function
(
e
,
n
){
function
f
(
e
,
n
){
this
.
node
=
e
,
this
.
parent
=
n
,
this
.
stack
=
null
,
this
.
bounds
=
null
,
this
.
borders
=
null
,
this
.
clip
=
[],
this
.
backgroundClip
=
[],
this
.
offsetBounds
=
null
,
this
.
visible
=
null
,
this
.
computedStyles
=
null
,
this
.
colors
=
{},
this
.
styles
=
{},
this
.
backgroundImages
=
null
,
this
.
transformData
=
null
,
this
.
transformMatrix
=
null
,
this
.
isPseudoElement
=!
1
,
this
.
opacity
=
null
}
function
o
(
e
){
var
n
=
e
.
options
[
e
.
selectedIndex
||
0
];
return
n
?
n
.
text
||
""
:
""
}
function
d
(
e
){
if
(
e
&&
"matrix"
===
e
[
1
])
return
e
[
2
].
split
(
","
).
map
(
function
(
e
){
return
parseFloat
(
e
.
trim
())});
if
(
e
&&
"matrix3d"
===
e
[
1
]){
var
n
=
e
[
2
].
split
(
","
).
map
(
function
(
e
){
return
parseFloat
(
e
.
trim
())});
return
[
n
[
0
],
n
[
1
],
n
[
4
],
n
[
5
],
n
[
12
],
n
[
13
]]}}
function
i
(
e
){
return
-
1
!==
e
.
toString
().
indexOf
(
"%"
)}
function
t
(
e
){
return
e
.
replace
(
"px"
,
""
)}
function
l
(
e
){
return
parseFloat
(
e
)}
var
s
=
e
(
"./color"
),
u
=
e
(
"./utils"
),
a
=
u
.
getBounds
,
p
=
u
.
parseBackgrounds
,
c
=
u
.
offsetBounds
;
f
.
prototype
.
cloneTo
=
function
(
e
){
e
.
visible
=
this
.
visible
,
e
.
borders
=
this
.
borders
,
e
.
bounds
=
this
.
bounds
,
e
.
clip
=
this
.
clip
,
e
.
backgroundClip
=
this
.
backgroundClip
,
e
.
computedStyles
=
this
.
computedStyles
,
e
.
styles
=
this
.
styles
,
e
.
backgroundImages
=
this
.
backgroundImages
,
e
.
opacity
=
this
.
opacity
},
f
.
prototype
.
getOpacity
=
function
(){
return
null
===
this
.
opacity
?
this
.
opacity
=
this
.
cssFloat
(
"opacity"
):
this
.
opacity
},
f
.
prototype
.
assignStack
=
function
(
e
){
this
.
stack
=
e
,
e
.
children
.
push
(
this
)},
f
.
prototype
.
isElementVisible
=
function
(){
return
this
.
node
.
nodeType
===
Node
.
TEXT_NODE
?
this
.
parent
.
visible
:
"none"
!==
this
.
css
(
"display"
)
&&
"hidden"
!==
this
.
css
(
"visibility"
)
&&!
this
.
node
.
hasAttribute
(
"data-html2canvas-ignore"
)
&&
(
"INPUT"
!==
this
.
node
.
nodeName
||
"hidden"
!==
this
.
node
.
getAttribute
(
"type"
))},
f
.
prototype
.
css
=
function
(
e
){
return
this
.
computedStyles
||
(
this
.
computedStyles
=
this
.
isPseudoElement
?
this
.
parent
.
computedStyle
(
this
.
before
?
":before"
:
":after"
):
this
.
computedStyle
(
null
)),
this
.
styles
[
e
]
||
(
this
.
styles
[
e
]
=
this
.
computedStyles
[
e
])},
f
.
prototype
.
prefixedCss
=
function
(
e
){
var
n
=
[
"webkit"
,
"moz"
,
"ms"
,
"o"
],
f
=
this
.
css
(
e
);
return
void
0
===
f
&&
n
.
some
(
function
(
n
){
return
f
=
this
.
css
(
n
+
e
.
substr
(
0
,
1
).
toUpperCase
()
+
e
.
substr
(
1
)),
void
0
!==
f
},
this
),
void
0
===
f
?
null
:
f
},
f
.
prototype
.
computedStyle
=
function
(
e
){
return
this
.
node
.
ownerDocument
.
defaultView
.
getComputedStyle
(
this
.
node
,
e
)},
f
.
prototype
.
cssInt
=
function
(
e
){
var
n
=
parseInt
(
this
.
css
(
e
),
10
);
return
isNaN
(
n
)?
0
:
n
},
f
.
prototype
.
color
=
function
(
e
){
return
this
.
colors
[
e
]
||
(
this
.
colors
[
e
]
=
new
s
(
this
.
css
(
e
)))},
f
.
prototype
.
cssFloat
=
function
(
e
){
var
n
=
parseFloat
(
this
.
css
(
e
));
return
isNaN
(
n
)?
0
:
n
},
f
.
prototype
.
fontWeight
=
function
(){
var
e
=
this
.
css
(
"fontWeight"
);
switch
(
parseInt
(
e
,
10
)){
case
401
:
e
=
"bold"
;
break
;
case
400
:
e
=
"normal"
}
return
e
},
f
.
prototype
.
parseClip
=
function
(){
var
e
=
this
.
css
(
"clip"
).
match
(
this
.
CLIP
);
return
e
?{
top
:
parseInt
(
e
[
1
],
10
),
right
:
parseInt
(
e
[
2
],
10
),
bottom
:
parseInt
(
e
[
3
],
10
),
left
:
parseInt
(
e
[
4
],
10
)}:
null
},
f
.
prototype
.
parseBackgroundImages
=
function
(){
return
this
.
backgroundImages
||
(
this
.
backgroundImages
=
p
(
this
.
css
(
"backgroundImage"
)))},
f
.
prototype
.
cssList
=
function
(
e
,
n
){
var
f
=
(
this
.
css
(
e
)
||
""
).
split
(
","
);
return
f
=
f
[
n
||
0
]
||
f
[
0
]
||
"auto"
,
f
=
f
.
trim
().
split
(
" "
),
1
===
f
.
length
&&
(
f
=
[
f
[
0
],
i
(
f
[
0
])?
"auto"
:
f
[
0
]]),
f
},
f
.
prototype
.
parseBackgroundSize
=
function
(
e
,
n
,
f
){
var
o
,
d
,
t
=
this
.
cssList
(
"backgroundSize"
,
f
);
if
(
i
(
t
[
0
]))
o
=
e
.
width
*
parseFloat
(
t
[
0
])
/
100
;
else
{
if
(
/contain|cover/
.
test
(
t
[
0
])){
var
l
=
e
.
width
/
e
.
height
,
s
=
n
.
width
/
n
.
height
;
return
s
>
l
^
"contain"
===
t
[
0
]?{
width
:
e
.
height
*
s
,
height
:
e
.
height
}:{
width
:
e
.
width
,
height
:
e
.
width
/
s
}}
o
=
parseInt
(
t
[
0
],
10
)}
return
d
=
"auto"
===
t
[
0
]
&&
"auto"
===
t
[
1
]?
n
.
height
:
"auto"
===
t
[
1
]?
o
/
n
.
width
*
n
.
height
:
i
(
t
[
1
])?
e
.
height
*
parseFloat
(
t
[
1
])
/
100
:
parseInt
(
t
[
1
],
10
),
"auto"
===
t
[
0
]
&&
(
o
=
d
/
n
.
height
*
n
.
width
),{
width
:
o
,
height
:
d
}},
f
.
prototype
.
parseBackgroundPosition
=
function
(
e
,
n
,
f
,
o
){
var
d
,
t
,
l
=
this
.
cssList
(
"backgroundPosition"
,
f
);
return
d
=
i
(
l
[
0
])?(
e
.
width
-
(
o
||
n
).
width
)
*
(
parseFloat
(
l
[
0
])
/
100
):
parseInt
(
l
[
0
],
10
),
t
=
"auto"
===
l
[
1
]?
d
/
n
.
width
*
n
.
height
:
i
(
l
[
1
])?(
e
.
height
-
(
o
||
n
).
height
)
*
parseFloat
(
l
[
1
])
/
100
:
parseInt
(
l
[
1
],
10
),
"auto"
===
l
[
0
]
&&
(
d
=
t
/
n
.
height
*
n
.
width
),{
left
:
d
,
top
:
t
}},
f
.
prototype
.
parseBackgroundRepeat
=
function
(
e
){
return
this
.
cssList
(
"backgroundRepeat"
,
e
)[
0
]},
f
.
prototype
.
parseTextShadows
=
function
(){
var
e
=
this
.
css
(
"textShadow"
),
n
=
[];
if
(
e
&&
"none"
!==
e
)
for
(
var
f
=
e
.
match
(
this
.
TEXT_SHADOW_PROPERTY
),
o
=
0
;
f
&&
o
<
f
.
length
;
o
++
){
var
d
=
f
[
o
].
match
(
this
.
TEXT_SHADOW_VALUES
);
n
.
push
({
color
:
new
s
(
d
[
0
]),
offsetX
:
d
[
1
]?
parseFloat
(
d
[
1
].
replace
(
"px"
,
""
)):
0
,
offsetY
:
d
[
2
]?
parseFloat
(
d
[
2
].
replace
(
"px"
,
""
)):
0
,
blur
:
d
[
3
]?
d
[
3
].
replace
(
"px"
,
""
):
0
})}
return
n
},
f
.
prototype
.
parseTransform
=
function
(){
if
(
!
this
.
transformData
)
if
(
this
.
hasTransform
()){
var
e
=
this
.
parseBounds
(),
n
=
this
.
prefixedCss
(
"transformOrigin"
).
split
(
" "
).
map
(
t
).
map
(
l
);
n
[
0
]
+=
e
.
left
,
n
[
1
]
+=
e
.
top
,
this
.
transformData
=
{
origin
:
n
,
matrix
:
this
.
parseTransformMatrix
()}}
else
this
.
transformData
=
{
origin
:[
0
,
0
],
matrix
:[
1
,
0
,
0
,
1
,
0
,
0
]};
return
this
.
transformData
},
f
.
prototype
.
parseTransformMatrix
=
function
(){
if
(
!
this
.
transformMatrix
){
var
e
=
this
.
prefixedCss
(
"transform"
),
n
=
e
?
d
(
e
.
match
(
this
.
MATRIX_PROPERTY
)):
null
;
this
.
transformMatrix
=
n
?
n
:[
1
,
0
,
0
,
1
,
0
,
0
]}
return
this
.
transformMatrix
},
f
.
prototype
.
parseBounds
=
function
(){
return
this
.
bounds
||
(
this
.
bounds
=
this
.
hasTransform
()?
c
(
this
.
node
):
a
(
this
.
node
))},
f
.
prototype
.
hasTransform
=
function
(){
return
"1,0,0,1,0,0"
!==
this
.
parseTransformMatrix
().
join
(
","
)
||
this
.
parent
&&
this
.
parent
.
hasTransform
()},
f
.
prototype
.
getValue
=
function
(){
var
e
=
this
.
node
.
value
||
""
;
return
"SELECT"
===
this
.
node
.
tagName
?
e
=
o
(
this
.
node
):
"password"
===
this
.
node
.
type
&&
(
e
=
Array
(
e
.
length
+
1
).
join
(
"•"
)),
0
===
e
.
length
?
this
.
node
.
placeholder
||
""
:
e
},
f
.
prototype
.
MATRIX_PROPERTY
=
/
(
matrix|matrix3d
)\((
.+
)\)
/
,
f
.
prototype
.
TEXT_SHADOW_PROPERTY
=
/
((
rgba|rgb
)\([^\)]
+
\)(\s
-
?\d
+px
){0,})
/g
,
f
.
prototype
.
TEXT_SHADOW_VALUES
=
/
(
-
?\d
+px
)
|
(
#.+
)
|
(
rgb
\(
.+
\))
|
(
rgba
\(
.+
\))
/g
,
f
.
prototype
.
CLIP
=
/^rect
\((\d
+
)
px,
?
(\d
+
)
px,
?
(\d
+
)
px,
?
(\d
+
)
px
\)
$/
,
n
.
exports
=
f
},{
"./color"
:
3
,
"./utils"
:
26
}],
15
:[
function
(
e
,
n
){
function
f
(
e
,
n
,
f
,
o
,
d
){
N
(
"Starting NodeParser"
),
this
.
renderer
=
n
,
this
.
options
=
d
,
this
.
range
=
null
,
this
.
support
=
f
,
this
.
renderQueue
=
[],
this
.
stack
=
new
U
(
!
0
,
1
,
e
.
ownerDocument
,
null
);
var
i
=
new
P
(
e
,
null
);
if
(
d
.
background
&&
n
.
rectangle
(
0
,
0
,
n
.
width
,
n
.
height
,
new
T
(
d
.
background
)),
e
===
e
.
ownerDocument
.
documentElement
){
var
t
=
new
P
(
i
.
color
(
"backgroundColor"
).
isTransparent
()?
e
.
ownerDocument
.
body
:
e
.
ownerDocument
.
documentElement
,
null
);
n
.
rectangle
(
0
,
0
,
n
.
width
,
n
.
height
,
t
.
color
(
"backgroundColor"
))}
i
.
visibile
=
i
.
isElementVisible
(),
this
.
createPseudoHideStyles
(
e
.
ownerDocument
),
this
.
disableAnimations
(
e
.
ownerDocument
),
this
.
nodes
=
I
([
i
].
concat
(
this
.
getChildren
(
i
)).
filter
(
function
(
e
){
return
e
.
visible
=
e
.
isElementVisible
()}).
map
(
this
.
getPseudoElements
,
this
)),
this
.
fontMetrics
=
new
S
,
N
(
"Fetched nodes, total:"
,
this
.
nodes
.
length
),
N
(
"Calculate overflow clips"
),
this
.
calculateOverflowClips
(),
N
(
"Start fetching images"
),
this
.
images
=
o
.
fetch
(
this
.
nodes
.
filter
(
A
)),
this
.
ready
=
this
.
images
.
ready
.
then
(
W
(
function
(){
return
N
(
"Images loaded, starting parsing"
),
N
(
"Creating stacking contexts"
),
this
.
createStackingContexts
(),
N
(
"Sorting stacking contexts"
),
this
.
sortStackingContexts
(
this
.
stack
),
this
.
parse
(
this
.
stack
),
N
(
"Render queue created with "
+
this
.
renderQueue
.
length
+
" items"
),
new
Promise
(
W
(
function
(
e
){
d
.
async
?
"function"
==
typeof
d
.
async
?
d
.
async
.
call
(
this
,
this
.
renderQueue
,
e
):
this
.
renderQueue
.
length
>
0
?(
this
.
renderIndex
=
0
,
this
.
asyncRenderer
(
this
.
renderQueue
,
e
)):
e
():(
this
.
renderQueue
.
forEach
(
this
.
paint
,
this
),
e
())},
this
))},
this
))}
function
o
(
e
){
return
e
.
parent
&&
e
.
parent
.
clip
.
length
}
function
d
(
e
){
return
e
.
replace
(
/
(\-[
a-z
])
/g
,
function
(
e
){
return
e
.
toUpperCase
().
replace
(
"-"
,
""
)})}
function
i
(){}
function
t
(
e
,
n
,
f
,
o
){
return
e
.
map
(
function
(
d
,
i
){
if
(
d
.
width
>
0
){
var
t
=
n
.
left
,
l
=
n
.
top
,
s
=
n
.
width
,
u
=
n
.
height
-
e
[
2
].
width
;
switch
(
i
){
case
0
:
u
=
e
[
0
].
width
,
d
.
args
=
a
({
c1
:[
t
,
l
],
c2
:[
t
+
s
,
l
],
c3
:[
t
+
s
-
e
[
1
].
width
,
l
+
u
],
c4
:[
t
+
e
[
3
].
width
,
l
+
u
]},
o
[
0
],
o
[
1
],
f
.
topLeftOuter
,
f
.
topLeftInner
,
f
.
topRightOuter
,
f
.
topRightInner
);
break
;
case
1
:
t
=
n
.
left
+
n
.
width
-
e
[
1
].
width
,
s
=
e
[
1
].
width
,
d
.
args
=
a
({
c1
:[
t
+
s
,
l
],
c2
:[
t
+
s
,
l
+
u
+
e
[
2
].
width
],
c3
:[
t
,
l
+
u
],
c4
:[
t
,
l
+
e
[
0
].
width
]},
o
[
1
],
o
[
2
],
f
.
topRightOuter
,
f
.
topRightInner
,
f
.
bottomRightOuter
,
f
.
bottomRightInner
);
break
;
case
2
:
l
=
l
+
n
.
height
-
e
[
2
].
width
,
u
=
e
[
2
].
width
,
d
.
args
=
a
({
c1
:[
t
+
s
,
l
+
u
],
c2
:[
t
,
l
+
u
],
c3
:[
t
+
e
[
3
].
width
,
l
],
c4
:[
t
+
s
-
e
[
3
].
width
,
l
]},
o
[
2
],
o
[
3
],
f
.
bottomRightOuter
,
f
.
bottomRightInner
,
f
.
bottomLeftOuter
,
f
.
bottomLeftInner
);
break
;
case
3
:
s
=
e
[
3
].
width
,
d
.
args
=
a
({
c1
:[
t
,
l
+
u
+
e
[
2
].
width
],
c2
:[
t
,
l
],
c3
:[
t
+
s
,
l
+
e
[
0
].
width
],
c4
:[
t
+
s
,
l
+
u
]},
o
[
3
],
o
[
0
],
f
.
bottomLeftOuter
,
f
.
bottomLeftInner
,
f
.
topLeftOuter
,
f
.
topLeftInner
)}}
return
d
})}
function
l
(
e
,
n
,
f
,
o
){
var
d
=
4
*
((
Math
.
sqrt
(
2
)
-
1
)
/
3
),
i
=
f
*
d
,
t
=
o
*
d
,
l
=
e
+
f
,
s
=
n
+
o
;
return
{
topLeft
:
u
({
x
:
e
,
y
:
s
},{
x
:
e
,
y
:
s
-
t
},{
x
:
l
-
i
,
y
:
n
},{
x
:
l
,
y
:
n
}),
topRight
:
u
({
x
:
e
,
y
:
n
},{
x
:
e
+
i
,
y
:
n
},{
x
:
l
,
y
:
s
-
t
},{
x
:
l
,
y
:
s
}),
bottomRight
:
u
({
x
:
l
,
y
:
n
},{
x
:
l
,
y
:
n
+
t
},{
x
:
e
+
i
,
y
:
s
},{
x
:
e
,
y
:
s
}),
bottomLeft
:
u
({
x
:
l
,
y
:
s
},{
x
:
l
-
i
,
y
:
s
},{
x
:
e
,
y
:
n
+
t
},{
x
:
e
,
y
:
n
})}}
function
s
(
e
,
n
,
f
){
var
o
=
e
.
left
,
d
=
e
.
top
,
i
=
e
.
width
,
t
=
e
.
height
,
s
=
n
[
0
][
0
]
<
i
/
2
?
n
[
0
][
0
]:
i
/
2
,
u
=
n
[
0
][
1
]
<
t
/
2
?
n
[
0
][
1
]:
t
/
2
,
a
=
n
[
1
][
0
]
<
i
/
2
?
n
[
1
][
0
]:
i
/
2
,
p
=
n
[
1
][
1
]
<
t
/
2
?
n
[
1
][
1
]:
t
/
2
,
c
=
n
[
2
][
0
]
<
i
/
2
?
n
[
2
][
0
]:
i
/
2
,
y
=
n
[
2
][
1
]
<
t
/
2
?
n
[
2
][
1
]:
t
/
2
,
m
=
n
[
3
][
0
]
<
i
/
2
?
n
[
3
][
0
]:
i
/
2
,
r
=
n
[
3
][
1
]
<
t
/
2
?
n
[
3
][
1
]:
t
/
2
,
v
=
i
-
a
,
w
=
t
-
y
,
b
=
i
-
c
,
g
=
t
-
r
;
return
{
topLeftOuter
:
l
(
o
,
d
,
s
,
u
).
topLeft
.
subdivide
(.
5
),
topLeftInner
:
l
(
o
+
f
[
3
].
width
,
d
+
f
[
0
].
width
,
Math
.
max
(
0
,
s
-
f
[
3
].
width
),
Math
.
max
(
0
,
u
-
f
[
0
].
width
)).
topLeft
.
subdivide
(.
5
),
topRightOuter
:
l
(
o
+
v
,
d
,
a
,
p
).
topRight
.
subdivide
(.
5
),
topRightInner
:
l
(
o
+
Math
.
min
(
v
,
i
+
f
[
3
].
width
),
d
+
f
[
0
].
width
,
v
>
i
+
f
[
3
].
width
?
0
:
a
-
f
[
3
].
width
,
p
-
f
[
0
].
width
).
topRight
.
subdivide
(.
5
),
bottomRightOuter
:
l
(
o
+
b
,
d
+
w
,
c
,
y
).
bottomRight
.
subdivide
(.
5
),
bottomRightInner
:
l
(
o
+
Math
.
min
(
b
,
i
-
f
[
3
].
width
),
d
+
Math
.
min
(
w
,
t
+
f
[
0
].
width
),
Math
.
max
(
0
,
c
-
f
[
1
].
width
),
y
-
f
[
2
].
width
).
bottomRight
.
subdivide
(.
5
),
bottomLeftOuter
:
l
(
o
,
d
+
g
,
m
,
r
).
bottomLeft
.
subdivide
(.
5
),
bottomLeftInner
:
l
(
o
+
f
[
3
].
width
,
d
+
g
,
Math
.
max
(
0
,
m
-
f
[
3
].
width
),
r
-
f
[
2
].
width
).
bottomLeft
.
subdivide
(.
5
)}
}
function
u
(
e
,
n
,
f
,
o
){
var
d
=
function
(
e
,
n
,
f
){
return
{
x
:
e
.
x
+
(
n
.
x
-
e
.
x
)
*
f
,
y
:
e
.
y
+
(
n
.
y
-
e
.
y
)
*
f
}};
return
{
start
:
e
,
startControl
:
n
,
endControl
:
f
,
end
:
o
,
subdivide
:
function
(
i
){
var
t
=
d
(
e
,
n
,
i
),
l
=
d
(
n
,
f
,
i
),
s
=
d
(
f
,
o
,
i
),
a
=
d
(
t
,
l
,
i
),
p
=
d
(
l
,
s
,
i
),
c
=
d
(
a
,
p
,
i
);
return
[
u
(
e
,
t
,
a
,
c
),
u
(
c
,
p
,
s
,
o
)]},
curveTo
:
function
(
e
){
e
.
push
([
"bezierCurve"
,
n
.
x
,
n
.
y
,
f
.
x
,
f
.
y
,
o
.
x
,
o
.
y
])},
curveToReversed
:
function
(
o
){
o
.
push
([
"bezierCurve"
,
f
.
x
,
f
.
y
,
n
.
x
,
n
.
y
,
e
.
x
,
e
.
y
])}}}
function
a
(
e
,
n
,
f
,
o
,
d
,
i
,
t
){
var
l
=
[];
return
n
[
0
]
>
0
||
n
[
1
]
>
0
?(
l
.
push
([
"line"
,
o
[
1
].
start
.
x
,
o
[
1
].
start
.
y
]),
o
[
1
].
curveTo
(
l
)):
l
.
push
([
"line"
,
e
.
c1
[
0
],
e
.
c1
[
1
]]),
f
[
0
]
>
0
||
f
[
1
]
>
0
?(
l
.
push
([
"line"
,
i
[
0
].
start
.
x
,
i
[
0
].
start
.
y
]),
i
[
0
].
curveTo
(
l
),
l
.
push
([
"line"
,
t
[
0
].
end
.
x
,
t
[
0
].
end
.
y
]),
t
[
0
].
curveToReversed
(
l
)):(
l
.
push
([
"line"
,
e
.
c2
[
0
],
e
.
c2
[
1
]]),
l
.
push
([
"line"
,
e
.
c3
[
0
],
e
.
c3
[
1
]])),
n
[
0
]
>
0
||
n
[
1
]
>
0
?(
l
.
push
([
"line"
,
d
[
1
].
end
.
x
,
d
[
1
].
end
.
y
]),
d
[
1
].
curveToReversed
(
l
)):
l
.
push
([
"line"
,
e
.
c4
[
0
],
e
.
c4
[
1
]]),
l
}
function
p
(
e
,
n
,
f
,
o
,
d
,
i
,
t
){
n
[
0
]
>
0
||
n
[
1
]
>
0
?(
e
.
push
([
"line"
,
o
[
0
].
start
.
x
,
o
[
0
].
start
.
y
]),
o
[
0
].
curveTo
(
e
),
o
[
1
].
curveTo
(
e
)):
e
.
push
([
"line"
,
i
,
t
]),(
f
[
0
]
>
0
||
f
[
1
]
>
0
)
&&
e
.
push
([
"line"
,
d
[
0
].
start
.
x
,
d
[
0
].
start
.
y
])}
function
c
(
e
){
return
e
.
cssInt
(
"zIndex"
)
<
0
}
function
y
(
e
){
return
e
.
cssInt
(
"zIndex"
)
>
0
}
function
m
(
e
){
return
0
===
e
.
cssInt
(
"zIndex"
)}
function
r
(
e
){
return
-
1
!==
[
"inline"
,
"inline-block"
,
"inline-table"
].
indexOf
(
e
.
css
(
"display"
))}
function
v
(
e
){
return
e
instanceof
U
}
function
w
(
e
){
return
e
.
node
.
data
.
trim
().
length
>
0
}
function
b
(
e
){
return
/^
(
normal|none|0px
)
$/
.
test
(
e
.
parent
.
css
(
"letterSpacing"
))}
function
g
(
e
){
return
[
"TopLeft"
,
"TopRight"
,
"BottomRight"
,
"BottomLeft"
].
map
(
function
(
n
){
var
f
=
e
.
css
(
"border"
+
n
+
"Radius"
),
o
=
f
.
split
(
" "
);
return
o
.
length
<=
1
&&
(
o
[
1
]
=
o
[
0
]),
o
.
map
(
F
)})}
function
h
(
e
){
return
e
.
nodeType
===
Node
.
TEXT_NODE
||
e
.
nodeType
===
Node
.
ELEMENT_NODE
}
function
x
(
e
){
var
n
=
e
.
css
(
"position"
),
f
=-
1
!==
[
"absolute"
,
"relative"
,
"fixed"
].
indexOf
(
n
)?
e
.
css
(
"zIndex"
):
"auto"
;
return
"auto"
!==
f
}
function
j
(
e
){
return
"static"
!==
e
.
css
(
"position"
)}
function
k
(
e
){
return
"none"
!==
e
.
css
(
"float"
)}
function
q
(
e
){
return
-
1
!==
[
"inline-block"
,
"inline-table"
].
indexOf
(
e
.
css
(
"display"
))}
function
z
(
e
){
var
n
=
this
;
return
function
(){
return
!
e
.
apply
(
n
,
arguments
)}}
function
A
(
e
){
return
e
.
node
.
nodeType
===
Node
.
ELEMENT_NODE
}
function
B
(
e
){
return
e
.
isPseudoElement
===!
0
}
function
C
(
e
){
return
e
.
node
.
nodeType
===
Node
.
TEXT_NODE
}
function
D
(
e
){
return
function
(
n
,
f
){
return
n
.
cssInt
(
"zIndex"
)
+
e
.
indexOf
(
n
)
/
e
.
length
-
(
f
.
cssInt
(
"zIndex"
)
+
e
.
indexOf
(
f
)
/
e
.
length
)}}
function
E
(
e
){
return
e
.
getOpacity
()
<
1
}
function
F
(
e
){
return
parseInt
(
e
,
10
)}
function
G
(
e
){
return
e
.
width
}
function
H
(
e
){
return
e
.
node
.
nodeType
!==
Node
.
ELEMENT_NODE
||-
1
===
[
"SCRIPT"
,
"HEAD"
,
"TITLE"
,
"OBJECT"
,
"BR"
,
"OPTION"
].
indexOf
(
e
.
node
.
nodeName
)}
function
I
(
e
){
return
[].
concat
.
apply
([],
e
)}
function
J
(
e
){
var
n
=
e
.
substr
(
0
,
1
);
return
n
===
e
.
substr
(
e
.
length
-
1
)
&&
n
.
match
(
/'|"/
)?
e
.
substr
(
1
,
e
.
length
-
2
):
e
}
function
K
(
e
){
for
(
var
n
,
f
=
[],
o
=
0
,
d
=!
1
;
e
.
length
;)
L
(
e
[
o
])
===
d
?(
n
=
e
.
splice
(
0
,
o
),
n
.
length
&&
f
.
push
(
O
.
ucs2
.
encode
(
n
)),
d
=!
d
,
o
=
0
):
o
++
,
o
>=
e
.
length
&&
(
n
=
e
.
splice
(
0
,
o
),
n
.
length
&&
f
.
push
(
O
.
ucs2
.
encode
(
n
)));
return
f
}
function
L
(
e
){
return
-
1
!==
[
32
,
13
,
10
,
9
,
45
].
indexOf
(
e
)}
function
M
(
e
){
return
/
[^\u
0000-
\u
00ff
]
/
.
test
(
e
)}
var
N
=
e
(
"./log"
),
O
=
e
(
"punycode"
),
P
=
e
(
"./nodecontainer"
),
Q
=
e
(
"./textcontainer"
),
R
=
e
(
"./pseudoelementcontainer"
),
S
=
e
(
"./fontmetrics"
),
T
=
e
(
"./color"
),
U
=
e
(
"./stackingcontext"
),
V
=
e
(
"./utils"
),
W
=
V
.
bind
,
X
=
V
.
getBounds
,
Y
=
V
.
parseBackgrounds
,
Z
=
V
.
offsetBounds
;
f
.
prototype
.
calculateOverflowClips
=
function
(){
this
.
nodes
.
forEach
(
function
(
e
){
if
(
A
(
e
)){
B
(
e
)
&&
e
.
appendToDOM
(),
e
.
borders
=
this
.
parseBorders
(
e
);
var
n
=
"hidden"
===
e
.
css
(
"overflow"
)?[
e
.
borders
.
clip
]:[],
f
=
e
.
parseClip
();
f
&&-
1
!==
[
"absolute"
,
"fixed"
].
indexOf
(
e
.
css
(
"position"
))
&&
n
.
push
([[
"rect"
,
e
.
bounds
.
left
+
f
.
left
,
e
.
bounds
.
top
+
f
.
top
,
f
.
right
-
f
.
left
,
f
.
bottom
-
f
.
top
]]),
e
.
clip
=
o
(
e
)?
e
.
parent
.
clip
.
concat
(
n
):
n
,
e
.
backgroundClip
=
"hidden"
!==
e
.
css
(
"overflow"
)?
e
.
clip
.
concat
([
e
.
borders
.
clip
]):
e
.
clip
,
B
(
e
)
&&
e
.
cleanDOM
()}
else
C
(
e
)
&&
(
e
.
clip
=
o
(
e
)?
e
.
parent
.
clip
:[]);
B
(
e
)
||
(
e
.
bounds
=
null
)},
this
)},
f
.
prototype
.
asyncRenderer
=
function
(
e
,
n
,
f
){
f
=
f
||
Date
.
now
(),
this
.
paint
(
e
[
this
.
renderIndex
++
]),
e
.
length
===
this
.
renderIndex
?
n
():
f
+
20
>
Date
.
now
()?
this
.
asyncRenderer
(
e
,
n
,
f
):
setTimeout
(
W
(
function
(){
this
.
asyncRenderer
(
e
,
n
)},
this
),
0
)},
f
.
prototype
.
createPseudoHideStyles
=
function
(
e
){
this
.
createStyles
(
e
,
"."
+
R
.
prototype
.
PSEUDO_HIDE_ELEMENT_CLASS_BEFORE
+
':before { content: "" !important; display: none !important; }.'
+
R
.
prototype
.
PSEUDO_HIDE_ELEMENT_CLASS_AFTER
+
':after { content: "" !important; display: none !important; }'
)},
f
.
prototype
.
disableAnimations
=
function
(
e
){
this
.
createStyles
(
e
,
"* { -webkit-animation: none !important; -moz-animation: none !important; -o-animation: none !important; animation: none !important; -webkit-transition: none !important; -moz-transition: none !important; -o-transition: none !important; transition: none !important;}"
)},
f
.
prototype
.
createStyles
=
function
(
e
,
n
){
var
f
=
e
.
createElement
(
"style"
);
f
.
innerHTML
=
n
,
e
.
body
.
appendChild
(
f
)},
f
.
prototype
.
getPseudoElements
=
function
(
e
){
var
n
=
[[
e
]];
if
(
e
.
node
.
nodeType
===
Node
.
ELEMENT_NODE
){
var
f
=
this
.
getPseudoElement
(
e
,
":before"
),
o
=
this
.
getPseudoElement
(
e
,
":after"
);
f
&&
n
.
push
(
f
),
o
&&
n
.
push
(
o
)}
return
I
(
n
)},
f
.
prototype
.
getPseudoElement
=
function
(
e
,
n
){
var
f
=
e
.
computedStyle
(
n
);
if
(
!
f
||!
f
.
content
||
"none"
===
f
.
content
||
"-moz-alt-content"
===
f
.
content
||
"none"
===
f
.
display
)
return
null
;
for
(
var
o
=
J
(
f
.
content
),
i
=
"url"
===
o
.
substr
(
0
,
3
),
t
=
document
.
createElement
(
i
?
"img"
:
"html2canvaspseudoelement"
),
l
=
new
R
(
t
,
e
,
n
),
s
=
f
.
length
-
1
;
s
>=
0
;
s
--
){
var
u
=
d
(
f
.
item
(
s
));
t
.
style
[
u
]
=
f
[
u
]}
if
(
t
.
className
=
R
.
prototype
.
PSEUDO_HIDE_ELEMENT_CLASS_BEFORE
+
" "
+
R
.
prototype
.
PSEUDO_HIDE_ELEMENT_CLASS_AFTER
,
i
)
return
t
.
src
=
Y
(
o
)[
0
].
args
[
0
],[
l
];
var
a
=
document
.
createTextNode
(
o
);
return
t
.
appendChild
(
a
),[
l
,
new
Q
(
a
,
l
)]},
f
.
prototype
.
getChildren
=
function
(
e
){
return
I
([].
filter
.
call
(
e
.
node
.
childNodes
,
h
).
map
(
function
(
n
){
var
f
=
[
n
.
nodeType
===
Node
.
TEXT_NODE
?
new
Q
(
n
,
e
):
new
P
(
n
,
e
)].
filter
(
H
);
return
n
.
nodeType
===
Node
.
ELEMENT_NODE
&&
f
.
length
&&
"TEXTAREA"
!==
n
.
tagName
?
f
[
0
].
isElementVisible
()?
f
.
concat
(
this
.
getChildren
(
f
[
0
])):[]:
f
},
this
))},
f
.
prototype
.
newStackingContext
=
function
(
e
,
n
){
var
f
=
new
U
(
n
,
e
.
getOpacity
(),
e
.
node
,
e
.
parent
);
e
.
cloneTo
(
f
);
var
o
=
n
?
f
.
getParentStack
(
this
):
f
.
parent
.
stack
;
o
.
contexts
.
push
(
f
),
e
.
stack
=
f
},
f
.
prototype
.
createStackingContexts
=
function
(){
this
.
nodes
.
forEach
(
function
(
e
){
A
(
e
)
&&
(
this
.
isRootElement
(
e
)
||
E
(
e
)
||
x
(
e
)
||
this
.
isBodyWithTransparentRoot
(
e
)
||
e
.
hasTransform
())?
this
.
newStackingContext
(
e
,
!
0
):
A
(
e
)
&&
(
j
(
e
)
&&
m
(
e
)
||
q
(
e
)
||
k
(
e
))?
this
.
newStackingContext
(
e
,
!
1
):
e
.
assignStack
(
e
.
parent
.
stack
)},
this
)},
f
.
prototype
.
isBodyWithTransparentRoot
=
function
(
e
){
return
"BODY"
===
e
.
node
.
nodeName
&&
e
.
parent
.
color
(
"backgroundColor"
).
isTransparent
()},
f
.
prototype
.
isRootElement
=
function
(
e
){
return
null
===
e
.
parent
},
f
.
prototype
.
sortStackingContexts
=
function
(
e
){
e
.
contexts
.
sort
(
D
(
e
.
contexts
.
slice
(
0
))),
e
.
contexts
.
forEach
(
this
.
sortStackingContexts
,
this
)},
f
.
prototype
.
parseTextBounds
=
function
(
e
){
return
function
(
n
,
f
,
o
){
if
(
"none"
!==
e
.
parent
.
css
(
"textDecoration"
).
substr
(
0
,
4
)
||
0
!==
n
.
trim
().
length
){
if
(
this
.
support
.
rangeBounds
&&!
e
.
parent
.
hasTransform
()){
var
d
=
o
.
slice
(
0
,
f
).
join
(
""
).
length
;
return
this
.
getRangeBounds
(
e
.
node
,
d
,
n
.
length
)}
if
(
e
.
node
&&
"string"
==
typeof
e
.
node
.
data
){
var
i
=
e
.
node
.
splitText
(
n
.
length
),
t
=
this
.
getWrapperBounds
(
e
.
node
,
e
.
parent
.
hasTransform
());
return
e
.
node
=
i
,
t
}}
else
(
!
this
.
support
.
rangeBounds
||
e
.
parent
.
hasTransform
())
&&
(
e
.
node
=
e
.
node
.
splitText
(
n
.
length
));
return
{}}},
f
.
prototype
.
getWrapperBounds
=
function
(
e
,
n
){
var
f
=
e
.
ownerDocument
.
createElement
(
"html2canvaswrapper"
),
o
=
e
.
parentNode
,
d
=
e
.
cloneNode
(
!
0
);
f
.
appendChild
(
e
.
cloneNode
(
!
0
)),
o
.
replaceChild
(
f
,
e
);
var
i
=
n
?
Z
(
f
):
X
(
f
);
return
o
.
replaceChild
(
d
,
f
),
i
},
f
.
prototype
.
getRangeBounds
=
function
(
e
,
n
,
f
){
var
o
=
this
.
range
||
(
this
.
range
=
e
.
ownerDocument
.
createRange
());
return
o
.
setStart
(
e
,
n
),
o
.
setEnd
(
e
,
n
+
f
),
o
.
getBoundingClientRect
()},
f
.
prototype
.
parse
=
function
(
e
){
var
n
=
e
.
contexts
.
filter
(
c
),
f
=
e
.
children
.
filter
(
A
),
o
=
f
.
filter
(
z
(
k
)),
d
=
o
.
filter
(
z
(
j
)).
filter
(
z
(
r
)),
t
=
f
.
filter
(
z
(
j
)).
filter
(
k
),
l
=
o
.
filter
(
z
(
j
)).
filter
(
r
),
s
=
e
.
contexts
.
concat
(
o
.
filter
(
j
)).
filter
(
m
),
u
=
e
.
children
.
filter
(
C
).
filter
(
w
),
a
=
e
.
contexts
.
filter
(
y
);
n
.
concat
(
d
).
concat
(
t
).
concat
(
l
).
concat
(
s
).
concat
(
u
).
concat
(
a
).
forEach
(
function
(
e
){
this
.
renderQueue
.
push
(
e
),
v
(
e
)
&&
(
this
.
parse
(
e
),
this
.
renderQueue
.
push
(
new
i
))},
this
)},
f
.
prototype
.
paint
=
function
(
e
){
try
{
e
instanceof
i
?
this
.
renderer
.
ctx
.
restore
():
C
(
e
)?(
B
(
e
.
parent
)
&&
e
.
parent
.
appendToDOM
(),
this
.
paintText
(
e
),
B
(
e
.
parent
)
&&
e
.
parent
.
cleanDOM
()):
this
.
paintNode
(
e
)}
catch
(
n
){
if
(
N
(
n
),
this
.
options
.
strict
)
throw
n
}},
f
.
prototype
.
paintNode
=
function
(
e
){
v
(
e
)
&&
(
this
.
renderer
.
setOpacity
(
e
.
opacity
),
this
.
renderer
.
ctx
.
save
(),
e
.
hasTransform
()
&&
this
.
renderer
.
setTransform
(
e
.
parseTransform
())),
"INPUT"
===
e
.
node
.
nodeName
&&
"checkbox"
===
e
.
node
.
type
?
this
.
paintCheckbox
(
e
):
"INPUT"
===
e
.
node
.
nodeName
&&
"radio"
===
e
.
node
.
type
?
this
.
paintRadio
(
e
):
this
.
paintElement
(
e
)},
f
.
prototype
.
paintElement
=
function
(
e
){
var
n
=
e
.
parseBounds
();
this
.
renderer
.
clip
(
e
.
backgroundClip
,
function
(){
this
.
renderer
.
renderBackground
(
e
,
n
,
e
.
borders
.
borders
.
map
(
G
))},
this
),
this
.
renderer
.
clip
(
e
.
clip
,
function
(){
this
.
renderer
.
renderBorders
(
e
.
borders
.
borders
)},
this
),
this
.
renderer
.
clip
(
e
.
backgroundClip
,
function
(){
switch
(
e
.
node
.
nodeName
){
case
"svg"
:
case
"IFRAME"
:
var
f
=
this
.
images
.
get
(
e
.
node
);
f
?
this
.
renderer
.
renderImage
(
e
,
n
,
e
.
borders
,
f
):
N
(
"Error loading <"
+
e
.
node
.
nodeName
+
">"
,
e
.
node
);
break
;
case
"IMG"
:
var
o
=
this
.
images
.
get
(
e
.
node
.
src
);
o
?
this
.
renderer
.
renderImage
(
e
,
n
,
e
.
borders
,
o
):
N
(
"Error loading <img>"
,
e
.
node
.
src
);
break
;
case
"CANVAS"
:
this
.
renderer
.
renderImage
(
e
,
n
,
e
.
borders
,{
image
:
e
.
node
});
break
;
case
"SELECT"
:
case
"INPUT"
:
case
"TEXTAREA"
:
this
.
paintFormValue
(
e
)}},
this
)},
f
.
prototype
.
paintCheckbox
=
function
(
e
){
var
n
=
e
.
parseBounds
(),
f
=
Math
.
min
(
n
.
width
,
n
.
height
),
o
=
{
width
:
f
-
1
,
height
:
f
-
1
,
top
:
n
.
top
,
left
:
n
.
left
},
d
=
[
3
,
3
],
i
=
[
d
,
d
,
d
,
d
],
l
=
[
1
,
1
,
1
,
1
].
map
(
function
(
e
){
return
{
color
:
new
T
(
"#A5A5A5"
),
width
:
e
}}),
u
=
s
(
o
,
i
,
l
);
this
.
renderer
.
clip
(
e
.
backgroundClip
,
function
(){
this
.
renderer
.
rectangle
(
o
.
left
+
1
,
o
.
top
+
1
,
o
.
width
-
2
,
o
.
height
-
2
,
new
T
(
"#DEDEDE"
)),
this
.
renderer
.
renderBorders
(
t
(
l
,
o
,
u
,
i
)),
e
.
node
.
checked
&&
(
this
.
renderer
.
font
(
new
T
(
"#424242"
),
"normal"
,
"normal"
,
"bold"
,
f
-
3
+
"px"
,
"arial"
),
this
.
renderer
.
text
(
"✔"
,
o
.
left
+
f
/
6
,
o
.
top
+
f
-
1
))},
this
)},
f
.
prototype
.
paintRadio
=
function
(
e
){
var
n
=
e
.
parseBounds
(),
f
=
Math
.
min
(
n
.
width
,
n
.
height
)
-
2
;
this
.
renderer
.
clip
(
e
.
backgroundClip
,
function
(){
this
.
renderer
.
circleStroke
(
n
.
left
+
1
,
n
.
top
+
1
,
f
,
new
T
(
"#DEDEDE"
),
1
,
new
T
(
"#A5A5A5"
)),
e
.
node
.
checked
&&
this
.
renderer
.
circle
(
Math
.
ceil
(
n
.
left
+
f
/
4
)
+
1
,
Math
.
ceil
(
n
.
top
+
f
/
4
)
+
1
,
Math
.
floor
(
f
/
2
),
new
T
(
"#424242"
))},
this
)},
f
.
prototype
.
paintFormValue
=
function
(
e
){
var
n
=
e
.
getValue
();
if
(
n
.
length
>
0
){
var
f
=
e
.
node
.
ownerDocument
,
o
=
f
.
createElement
(
"html2canvaswrapper"
),
d
=
[
"lineHeight"
,
"textAlign"
,
"fontFamily"
,
"fontWeight"
,
"fontSize"
,
"color"
,
"paddingLeft"
,
"paddingTop"
,
"paddingRight"
,
"paddingBottom"
,
"width"
,
"height"
,
"borderLeftStyle"
,
"borderTopStyle"
,
"borderLeftWidth"
,
"borderTopWidth"
,
"boxSizing"
,
"whiteSpace"
,
"wordWrap"
];
d
.
forEach
(
function
(
n
){
try
{
o
.
style
[
n
]
=
e
.
css
(
n
)}
catch
(
f
){
N
(
"html2canvas: Parse: Exception caught in renderFormValue: "
+
f
.
message
)}});
var
i
=
e
.
parseBounds
();
o
.
style
.
position
=
"fixed"
,
o
.
style
.
left
=
i
.
left
+
"px"
,
o
.
style
.
top
=
i
.
top
+
"px"
,
o
.
textContent
=
n
,
f
.
body
.
appendChild
(
o
),
this
.
paintText
(
new
Q
(
o
.
firstChild
,
e
)),
f
.
body
.
removeChild
(
o
)}},
f
.
prototype
.
paintText
=
function
(
e
){
e
.
applyTextTransform
();
var
n
=
O
.
ucs2
.
decode
(
e
.
node
.
data
),
f
=
this
.
options
.
letterRendering
&&!
b
(
e
)
||
M
(
e
.
node
.
data
)?
n
.
map
(
function
(
e
){
return
O
.
ucs2
.
encode
([
e
])}):
K
(
n
),
o
=
e
.
parent
.
fontWeight
(),
d
=
e
.
parent
.
css
(
"fontSize"
),
i
=
e
.
parent
.
css
(
"fontFamily"
),
t
=
e
.
parent
.
parseTextShadows
();
this
.
renderer
.
font
(
e
.
parent
.
color
(
"color"
),
e
.
parent
.
css
(
"fontStyle"
),
e
.
parent
.
css
(
"fontVariant"
),
o
,
d
,
i
),
t
.
length
?
this
.
renderer
.
fontShadow
(
t
[
0
].
color
,
t
[
0
].
offsetX
,
t
[
0
].
offsetY
,
t
[
0
].
blur
):
this
.
renderer
.
clearShadow
(),
this
.
renderer
.
clip
(
e
.
parent
.
clip
,
function
(){
f
.
map
(
this
.
parseTextBounds
(
e
),
this
).
forEach
(
function
(
n
,
o
){
n
&&
(
this
.
renderer
.
text
(
f
[
o
],
n
.
left
,
n
.
bottom
),
this
.
renderTextDecoration
(
e
.
parent
,
n
,
this
.
fontMetrics
.
getMetrics
(
i
,
d
)))},
this
)},
this
)},
f
.
prototype
.
renderTextDecoration
=
function
(
e
,
n
,
f
){
switch
(
e
.
css
(
"textDecoration"
).
split
(
" "
)[
0
]){
case
"underline"
:
this
.
renderer
.
rectangle
(
n
.
left
,
Math
.
round
(
n
.
top
+
f
.
baseline
+
f
.
lineWidth
),
n
.
width
,
1
,
e
.
color
(
"color"
));
break
;
case
"overline"
:
this
.
renderer
.
rectangle
(
n
.
left
,
Math
.
round
(
n
.
top
),
n
.
width
,
1
,
e
.
color
(
"color"
));
break
;
case
"line-through"
:
this
.
renderer
.
rectangle
(
n
.
left
,
Math
.
ceil
(
n
.
top
+
f
.
middle
+
f
.
lineWidth
),
n
.
width
,
1
,
e
.
color
(
"color"
))}};
var
$
=
{
inset
:[[
"darken"
,.
6
],[
"darken"
,.
1
],[
"darken"
,.
1
],[
"darken"
,.
6
]]};
f
.
prototype
.
parseBorders
=
function
(
e
){
var
n
=
e
.
parseBounds
(),
f
=
g
(
e
),
o
=
[
"Top"
,
"Right"
,
"Bottom"
,
"Left"
].
map
(
function
(
n
,
f
){
var
o
=
e
.
css
(
"border"
+
n
+
"Style"
),
d
=
e
.
color
(
"border"
+
n
+
"Color"
);
"inset"
===
o
&&
d
.
isBlack
()
&&
(
d
=
new
T
([
255
,
255
,
255
,
d
.
a
]));
var
i
=
$
[
o
]?
$
[
o
][
f
]:
null
;
return
{
width
:
e
.
cssInt
(
"border"
+
n
+
"Width"
),
color
:
i
?
d
[
i
[
0
]](
i
[
1
]):
d
,
args
:
null
}}),
d
=
s
(
n
,
f
,
o
);
return
{
clip
:
this
.
parseBackgroundClip
(
e
,
d
,
o
,
f
,
n
),
borders
:
t
(
o
,
n
,
d
,
f
)}},
f
.
prototype
.
parseBackgroundClip
=
function
(
e
,
n
,
f
,
o
,
d
){
var
i
=
e
.
css
(
"backgroundClip"
),
t
=
[];
switch
(
i
){
case
"content-box"
:
case
"padding-box"
:
p
(
t
,
o
[
0
],
o
[
1
],
n
.
topLeftInner
,
n
.
topRightInner
,
d
.
left
+
f
[
3
].
width
,
d
.
top
+
f
[
0
].
width
),
p
(
t
,
o
[
1
],
o
[
2
],
n
.
topRightInner
,
n
.
bottomRightInner
,
d
.
left
+
d
.
width
-
f
[
1
].
width
,
d
.
top
+
f
[
0
].
width
),
p
(
t
,
o
[
2
],
o
[
3
],
n
.
bottomRightInner
,
n
.
bottomLeftInner
,
d
.
left
+
d
.
width
-
f
[
1
].
width
,
d
.
top
+
d
.
height
-
f
[
2
].
width
),
p
(
t
,
o
[
3
],
o
[
0
],
n
.
bottomLeftInner
,
n
.
topLeftInner
,
d
.
left
+
f
[
3
].
width
,
d
.
top
+
d
.
height
-
f
[
2
].
width
);
break
;
default
:
p
(
t
,
o
[
0
],
o
[
1
],
n
.
topLeftOuter
,
n
.
topRightOuter
,
d
.
left
,
d
.
top
),
p
(
t
,
o
[
1
],
o
[
2
],
n
.
topRightOuter
,
n
.
bottomRightOuter
,
d
.
left
+
d
.
width
,
d
.
top
),
p
(
t
,
o
[
2
],
o
[
3
],
n
.
bottomRightOuter
,
n
.
bottomLeftOuter
,
d
.
left
+
d
.
width
,
d
.
top
+
d
.
height
),
p
(
t
,
o
[
3
],
o
[
0
],
n
.
bottomLeftOuter
,
n
.
topLeftOuter
,
d
.
left
,
d
.
top
+
d
.
height
)}
return
t
},
n
.
exports
=
f
},{
"./color"
:
3
,
"./fontmetrics"
:
7
,
"./log"
:
13
,
"./nodecontainer"
:
14
,
"./pseudoelementcontainer"
:
18
,
"./stackingcontext"
:
21
,
"./textcontainer"
:
25
,
"./utils"
:
26
,
punycode
:
1
}],
16
:[
function
(
e
,
n
,
f
){
function
o
(
e
,
n
,
f
){
var
o
=
"withCredentials"
in
new
XMLHttpRequest
;
if
(
!
n
)
return
Promise
.
reject
(
"No proxy configured"
);
var
d
=
t
(
o
),
s
=
l
(
n
,
e
,
d
);
return
o
?
a
(
s
):
i
(
f
,
s
,
d
).
then
(
function
(
e
){
return
m
(
e
.
content
)})}
function
d
(
e
,
n
,
f
){
var
o
=
"crossOrigin"
in
new
Image
,
d
=
t
(
o
),
s
=
l
(
n
,
e
,
d
);
return
o
?
Promise
.
resolve
(
s
):
i
(
f
,
s
,
d
).
then
(
function
(
e
){
return
"data:"
+
e
.
type
+
";base64,"
+
e
.
content
})}
function
i
(
e
,
n
,
f
){
return
new
Promise
(
function
(
o
,
d
){
var
i
=
e
.
createElement
(
"script"
),
t
=
function
(){
delete
window
.
html2canvas
.
proxy
[
f
],
e
.
body
.
removeChild
(
i
)};
window
.
html2canvas
.
proxy
[
f
]
=
function
(
e
){
t
(),
o
(
e
)},
i
.
src
=
n
,
i
.
onerror
=
function
(
e
){
t
(),
d
(
e
)},
e
.
body
.
appendChild
(
i
)})}
function
t
(
e
){
return
e
?
""
:
"html2canvas_"
+
Date
.
now
()
+
"_"
+
++
r
+
"_"
+
Math
.
round
(
1
e5
*
Math
.
random
())}
function
l
(
e
,
n
,
f
){
return
e
+
"?url="
+
encodeURIComponent
(
n
)
+
(
f
.
length
?
"&callback=html2canvas.proxy."
+
f
:
""
)}
function
s
(
e
){
return
function
(
n
){
var
f
,
o
=
new
DOMParser
;
try
{
f
=
o
.
parseFromString
(
n
,
"text/html"
)}
catch
(
d
){
c
(
"DOMParser not supported, falling back to createHTMLDocument"
),
f
=
document
.
implementation
.
createHTMLDocument
(
""
);
try
{
f
.
open
(),
f
.
write
(
n
),
f
.
close
()}
catch
(
i
){
c
(
"createHTMLDocument write not supported, falling back to document.body.innerHTML"
),
f
.
body
.
innerHTML
=
n
}}
var
t
=
f
.
querySelector
(
"base"
);
if
(
!
t
||!
t
.
href
.
host
){
var
l
=
f
.
createElement
(
"base"
);
l
.
href
=
e
,
f
.
head
.
insertBefore
(
l
,
f
.
head
.
firstChild
)}
return
f
}}
function
u
(
e
,
n
,
f
,
d
,
i
,
t
){
return
new
o
(
e
,
n
,
window
.
document
).
then
(
s
(
e
)).
then
(
function
(
e
){
return
y
(
e
,
f
,
d
,
i
,
t
,
0
,
0
)})}
var
a
=
e
(
"./xhr"
),
p
=
e
(
"./utils"
),
c
=
e
(
"./log"
),
y
=
e
(
"./clone"
),
m
=
p
.
decode64
,
r
=
0
;
f
.
Proxy
=
o
,
f
.
ProxyURL
=
d
,
f
.
loadUrlDocument
=
u
},{
"./clone"
:
2
,
"./log"
:
13
,
"./utils"
:
26
,
"./xhr"
:
28
}],
17
:[
function
(
e
,
n
){
function
f
(
e
,
n
){
var
f
=
document
.
createElement
(
"a"
);
f
.
href
=
e
,
e
=
f
.
href
,
this
.
src
=
e
,
this
.
image
=
new
Image
;
var
d
=
this
;
this
.
promise
=
new
Promise
(
function
(
f
,
i
){
d
.
image
.
crossOrigin
=
"Anonymous"
,
d
.
image
.
onload
=
f
,
d
.
image
.
onerror
=
i
,
new
o
(
e
,
n
,
document
).
then
(
function
(
e
){
d
.
image
.
src
=
e
})[
"catch"
](
i
)})}
var
o
=
e
(
"./proxy"
).
ProxyURL
;
n
.
exports
=
f
},{
"./proxy"
:
16
}],
18
:[
function
(
e
,
n
){
function
f
(
e
,
n
,
f
){
o
.
call
(
this
,
e
,
n
),
this
.
isPseudoElement
=!
0
,
this
.
before
=
":before"
===
f
}
var
o
=
e
(
"./nodecontainer"
);
f
.
prototype
.
cloneTo
=
function
(
e
){
f
.
prototype
.
cloneTo
.
call
(
this
,
e
),
e
.
isPseudoElement
=!
0
,
e
.
before
=
this
.
before
},
f
.
prototype
=
Object
.
create
(
o
.
prototype
),
f
.
prototype
.
appendToDOM
=
function
(){
this
.
before
?
this
.
parent
.
node
.
insertBefore
(
this
.
node
,
this
.
parent
.
node
.
firstChild
):
this
.
parent
.
node
.
appendChild
(
this
.
node
),
this
.
parent
.
node
.
className
+=
" "
+
this
.
getHideClass
()},
f
.
prototype
.
cleanDOM
=
function
(){
this
.
node
.
parentNode
.
removeChild
(
this
.
node
),
this
.
parent
.
node
.
className
=
this
.
parent
.
node
.
className
.
replace
(
this
.
getHideClass
(),
""
)},
f
.
prototype
.
getHideClass
=
function
(){
return
this
[
"PSEUDO_HIDE_ELEMENT_CLASS_"
+
(
this
.
before
?
"BEFORE"
:
"AFTER"
)]},
f
.
prototype
.
PSEUDO_HIDE_ELEMENT_CLASS_BEFORE
=
"___html2canvas___pseudoelement_before"
,
f
.
prototype
.
PSEUDO_HIDE_ELEMENT_CLASS_AFTER
=
"___html2canvas___pseudoelement_after"
,
n
.
exports
=
f
},{
"./nodecontainer"
:
14
}],
19
:[
function
(
e
,
n
){
function
f
(
e
,
n
,
f
,
o
,
d
){
this
.
width
=
e
,
this
.
height
=
n
,
this
.
images
=
f
,
this
.
options
=
o
,
this
.
document
=
d
}
var
o
=
e
(
"./log"
);
f
.
prototype
.
renderImage
=
function
(
e
,
n
,
f
,
o
){
var
d
=
e
.
cssInt
(
"paddingLeft"
),
i
=
e
.
cssInt
(
"paddingTop"
),
t
=
e
.
cssInt
(
"paddingRight"
),
l
=
e
.
cssInt
(
"paddingBottom"
),
s
=
f
.
borders
,
u
=
n
.
width
-
(
s
[
1
].
width
+
s
[
3
].
width
+
d
+
t
),
a
=
n
.
height
-
(
s
[
0
].
width
+
s
[
2
].
width
+
i
+
l
);
this
.
drawImage
(
o
,
0
,
0
,
o
.
image
.
width
||
u
,
o
.
image
.
height
||
a
,
n
.
left
+
d
+
s
[
3
].
width
,
n
.
top
+
i
+
s
[
0
].
width
,
u
,
a
)},
f
.
prototype
.
renderBackground
=
function
(
e
,
n
,
f
){
n
.
height
>
0
&&
n
.
width
>
0
&&
(
this
.
renderBackgroundColor
(
e
,
n
),
this
.
renderBackgroundImage
(
e
,
n
,
f
))},
f
.
prototype
.
renderBackgroundColor
=
function
(
e
,
n
){
var
f
=
e
.
color
(
"backgroundColor"
);
f
.
isTransparent
()
||
this
.
rectangle
(
n
.
left
,
n
.
top
,
n
.
width
,
n
.
height
,
f
)},
f
.
prototype
.
renderBorders
=
function
(
e
){
e
.
forEach
(
this
.
renderBorder
,
this
)},
f
.
prototype
.
renderBorder
=
function
(
e
){
e
.
color
.
isTransparent
()
||
null
===
e
.
args
||
this
.
drawShape
(
e
.
args
,
e
.
color
)},
f
.
prototype
.
renderBackgroundImage
=
function
(
e
,
n
,
f
){
var
d
=
e
.
parseBackgroundImages
();
d
.
reverse
().
forEach
(
function
(
d
,
i
,
t
){
switch
(
d
.
method
){
case
"url"
:
var
l
=
this
.
images
.
get
(
d
.
args
[
0
]);
l
?
this
.
renderBackgroundRepeating
(
e
,
n
,
l
,
t
.
length
-
(
i
+
1
),
f
):
o
(
"Error loading background-image"
,
d
.
args
[
0
]);
break
;
case
"linear-gradient"
:
case
"gradient"
:
var
s
=
this
.
images
.
get
(
d
.
value
);
s
?
this
.
renderBackgroundGradient
(
s
,
n
,
f
):
o
(
"Error loading background-image"
,
d
.
args
[
0
]);
break
;
case
"none"
:
break
;
default
:
o
(
"Unknown background-image type"
,
d
.
args
[
0
])}},
this
)},
f
.
prototype
.
renderBackgroundRepeating
=
function
(
e
,
n
,
f
,
o
,
d
){
var
i
=
e
.
parseBackgroundSize
(
n
,
f
.
image
,
o
),
t
=
e
.
parseBackgroundPosition
(
n
,
f
.
image
,
o
,
i
),
l
=
e
.
parseBackgroundRepeat
(
o
);
switch
(
l
){
case
"repeat-x"
:
case
"repeat no-repeat"
:
this
.
backgroundRepeatShape
(
f
,
t
,
i
,
n
,
n
.
left
+
d
[
3
],
n
.
top
+
t
.
top
+
d
[
0
],
99999
,
i
.
height
,
d
);
break
;
case
"repeat-y"
:
case
"no-repeat repeat"
:
this
.
backgroundRepeatShape
(
f
,
t
,
i
,
n
,
n
.
left
+
t
.
left
+
d
[
3
],
n
.
top
+
d
[
0
],
i
.
width
,
99999
,
d
);
break
;
case
"no-repeat"
:
this
.
backgroundRepeatShape
(
f
,
t
,
i
,
n
,
n
.
left
+
t
.
left
+
d
[
3
],
n
.
top
+
t
.
top
+
d
[
0
],
i
.
width
,
i
.
height
,
d
);
break
;
default
:
this
.
renderBackgroundRepeat
(
f
,
t
,
i
,{
top
:
n
.
top
,
left
:
n
.
left
},
d
[
3
],
d
[
0
])}},
n
.
exports
=
f
},{
"./log"
:
13
}],
20
:[
function
(
e
,
n
){
function
f
(
e
,
n
){
d
.
apply
(
this
,
arguments
),
this
.
canvas
=
this
.
options
.
canvas
||
this
.
document
.
createElement
(
"canvas"
),
this
.
options
.
canvas
||
(
this
.
canvas
.
width
=
e
,
this
.
canvas
.
height
=
n
),
this
.
ctx
=
this
.
canvas
.
getContext
(
"2d"
),
this
.
taintCtx
=
this
.
document
.
createElement
(
"canvas"
).
getContext
(
"2d"
),
this
.
ctx
.
textBaseline
=
"bottom"
,
this
.
variables
=
{},
t
(
"Initialized CanvasRenderer with size"
,
e
,
"x"
,
n
)}
function
o
(
e
){
return
e
.
length
>
0
}
var
d
=
e
(
"../renderer"
),
i
=
e
(
"../lineargradientcontainer"
),
t
=
e
(
"../log"
);
f
.
prototype
=
Object
.
create
(
d
.
prototype
),
f
.
prototype
.
setFillStyle
=
function
(
e
){
return
this
.
ctx
.
fillStyle
=
"object"
==
typeof
e
&&
e
.
isColor
?
e
.
toString
():
e
,
this
.
ctx
},
f
.
prototype
.
rectangle
=
function
(
e
,
n
,
f
,
o
,
d
){
this
.
setFillStyle
(
d
).
fillRect
(
e
,
n
,
f
,
o
)},
f
.
prototype
.
circle
=
function
(
e
,
n
,
f
,
o
){
this
.
setFillStyle
(
o
),
this
.
ctx
.
beginPath
(),
this
.
ctx
.
arc
(
e
+
f
/
2
,
n
+
f
/
2
,
f
/
2
,
0
,
2
*
Math
.
PI
,
!
0
),
this
.
ctx
.
closePath
(),
this
.
ctx
.
fill
()},
f
.
prototype
.
circleStroke
=
function
(
e
,
n
,
f
,
o
,
d
,
i
){
this
.
circle
(
e
,
n
,
f
,
o
),
this
.
ctx
.
strokeStyle
=
i
.
toString
(),
this
.
ctx
.
stroke
()},
f
.
prototype
.
drawShape
=
function
(
e
,
n
){
this
.
shape
(
e
),
this
.
setFillStyle
(
n
).
fill
()},
f
.
prototype
.
taints
=
function
(
e
){
if
(
null
===
e
.
tainted
){
this
.
taintCtx
.
drawImage
(
e
.
image
,
0
,
0
);
try
{
this
.
taintCtx
.
getImageData
(
0
,
0
,
1
,
1
),
e
.
tainted
=!
1
}
catch
(
n
){
this
.
taintCtx
=
document
.
createElement
(
"canvas"
).
getContext
(
"2d"
),
e
.
tainted
=!
0
}}
return
e
.
tainted
},
f
.
prototype
.
drawImage
=
function
(
e
,
n
,
f
,
o
,
d
,
i
,
t
,
l
,
s
){(
!
this
.
taints
(
e
)
||
this
.
options
.
allowTaint
)
&&
this
.
ctx
.
drawImage
(
e
.
image
,
n
,
f
,
o
,
d
,
i
,
t
,
l
,
s
)},
f
.
prototype
.
clip
=
function
(
e
,
n
,
f
){
this
.
ctx
.
save
(),
e
.
filter
(
o
).
forEach
(
function
(
e
){
this
.
shape
(
e
).
clip
()},
this
),
n
.
call
(
f
),
this
.
ctx
.
restore
()},
f
.
prototype
.
shape
=
function
(
e
){
return
this
.
ctx
.
beginPath
(),
e
.
forEach
(
function
(
e
,
n
){
"rect"
===
e
[
0
]?
this
.
ctx
.
rect
.
apply
(
this
.
ctx
,
e
.
slice
(
1
)):
this
.
ctx
[
0
===
n
?
"moveTo"
:
e
[
0
]
+
"To"
].
apply
(
this
.
ctx
,
e
.
slice
(
1
))},
this
),
this
.
ctx
.
closePath
(),
this
.
ctx
},
f
.
prototype
.
font
=
function
(
e
,
n
,
f
,
o
,
d
,
i
){
this
.
setFillStyle
(
e
).
font
=
[
n
,
f
,
o
,
d
,
i
].
join
(
" "
).
split
(
","
)[
0
]},
f
.
prototype
.
fontShadow
=
function
(
e
,
n
,
f
,
o
){
this
.
setVariable
(
"shadowColor"
,
e
.
toString
()).
setVariable
(
"shadowOffsetY"
,
n
).
setVariable
(
"shadowOffsetX"
,
f
).
setVariable
(
"shadowBlur"
,
o
)},
f
.
prototype
.
clearShadow
=
function
(){
this
.
setVariable
(
"shadowColor"
,
"rgba(0,0,0,0)"
)},
f
.
prototype
.
setOpacity
=
function
(
e
){
this
.
ctx
.
globalAlpha
=
e
},
f
.
prototype
.
setTransform
=
function
(
e
){
this
.
ctx
.
translate
(
e
.
origin
[
0
],
e
.
origin
[
1
]),
this
.
ctx
.
transform
.
apply
(
this
.
ctx
,
e
.
matrix
),
this
.
ctx
.
translate
(
-
e
.
origin
[
0
],
-
e
.
origin
[
1
])},
f
.
prototype
.
setVariable
=
function
(
e
,
n
){
return
this
.
variables
[
e
]
!==
n
&&
(
this
.
variables
[
e
]
=
this
.
ctx
[
e
]
=
n
),
this
},
f
.
prototype
.
text
=
function
(
e
,
n
,
f
){
this
.
ctx
.
fillText
(
e
,
n
,
f
)},
f
.
prototype
.
backgroundRepeatShape
=
function
(
e
,
n
,
f
,
o
,
d
,
i
,
t
,
l
,
s
){
var
u
=
[[
"line"
,
Math
.
round
(
d
),
Math
.
round
(
i
)],[
"line"
,
Math
.
round
(
d
+
t
),
Math
.
round
(
i
)],[
"line"
,
Math
.
round
(
d
+
t
),
Math
.
round
(
l
+
i
)],[
"line"
,
Math
.
round
(
d
),
Math
.
round
(
l
+
i
)]];
this
.
clip
([
u
],
function
(){
this
.
renderBackgroundRepeat
(
e
,
n
,
f
,
o
,
s
[
3
],
s
[
0
])},
this
)},
f
.
prototype
.
renderBackgroundRepeat
=
function
(
e
,
n
,
f
,
o
,
d
,
i
){
var
t
=
Math
.
round
(
o
.
left
+
n
.
left
+
d
),
l
=
Math
.
round
(
o
.
top
+
n
.
top
+
i
);
this
.
setFillStyle
(
this
.
ctx
.
createPattern
(
this
.
resizeImage
(
e
,
f
),
"repeat"
)),
this
.
ctx
.
translate
(
t
,
l
),
this
.
ctx
.
fill
(),
this
.
ctx
.
translate
(
-
t
,
-
l
)},
f
.
prototype
.
renderBackgroundGradient
=
function
(
e
,
n
){
if
(
e
instanceof
i
){
var
f
=
this
.
ctx
.
createLinearGradient
(
n
.
left
+
n
.
width
*
e
.
x0
,
n
.
top
+
n
.
height
*
e
.
y0
,
n
.
left
+
n
.
width
*
e
.
x1
,
n
.
top
+
n
.
height
*
e
.
y1
);
e
.
colorStops
.
forEach
(
function
(
e
){
f
.
addColorStop
(
e
.
stop
,
e
.
color
.
toString
())}),
this
.
rectangle
(
n
.
left
,
n
.
top
,
n
.
width
,
n
.
height
,
f
)}},
f
.
prototype
.
resizeImage
=
function
(
e
,
n
){
var
f
=
e
.
image
;
if
(
f
.
width
===
n
.
width
&&
f
.
height
===
n
.
height
)
return
f
;
var
o
,
d
=
document
.
createElement
(
"canvas"
);
return
d
.
width
=
n
.
width
,
d
.
height
=
n
.
height
,
o
=
d
.
getContext
(
"2d"
),
o
.
drawImage
(
f
,
0
,
0
,
f
.
width
,
f
.
height
,
0
,
0
,
n
.
width
,
n
.
height
),
d
},
n
.
exports
=
f
},{
"../lineargradientcontainer"
:
12
,
"../log"
:
13
,
"../renderer"
:
19
}],
21
:[
function
(
e
,
n
){
function
f
(
e
,
n
,
f
,
d
){
o
.
call
(
this
,
f
,
d
),
this
.
ownStacking
=
e
,
this
.
contexts
=
[],
this
.
children
=
[],
this
.
opacity
=
(
this
.
parent
?
this
.
parent
.
stack
.
opacity
:
1
)
*
n
}
var
o
=
e
(
"./nodecontainer"
);
f
.
prototype
=
Object
.
create
(
o
.
prototype
),
f
.
prototype
.
getParentStack
=
function
(
e
){
var
n
=
this
.
parent
?
this
.
parent
.
stack
:
null
;
return
n
?
n
.
ownStacking
?
n
:
n
.
getParentStack
(
e
):
e
.
stack
},
n
.
exports
=
f
},{
"./nodecontainer"
:
14
}],
22
:[
function
(
e
,
n
){
function
f
(
e
){
this
.
rangeBounds
=
this
.
testRangeBounds
(
e
),
this
.
cors
=
this
.
testCORS
(),
this
.
svg
=
this
.
testSVG
()}
f
.
prototype
.
testRangeBounds
=
function
(
e
){
var
n
,
f
,
o
,
d
,
i
=!
1
;
return
e
.
createRange
&&
(
n
=
e
.
createRange
(),
n
.
getBoundingClientRect
&&
(
f
=
e
.
createElement
(
"boundtest"
),
f
.
style
.
height
=
"123px"
,
f
.
style
.
display
=
"block"
,
e
.
body
.
appendChild
(
f
),
n
.
selectNode
(
f
),
o
=
n
.
getBoundingClientRect
(),
d
=
o
.
height
,
123
===
d
&&
(
i
=!
0
),
e
.
body
.
removeChild
(
f
))),
i
},
f
.
prototype
.
testCORS
=
function
(){
return
"undefined"
!=
typeof
(
new
Image
).
crossOrigin
},
f
.
prototype
.
testSVG
=
function
(){
var
e
=
new
Image
,
n
=
document
.
createElement
(
"canvas"
),
f
=
n
.
getContext
(
"2d"
);
e
.
src
=
"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>"
;
try
{
f
.
drawImage
(
e
,
0
,
0
),
n
.
toDataURL
()}
catch
(
o
){
return
!
1
}
return
!
0
},
n
.
exports
=
f
},{}],
23
:[
function
(
e
,
n
){
function
f
(
e
){
this
.
src
=
e
,
this
.
image
=
null
;
var
n
=
this
;
this
.
promise
=
this
.
hasFabric
().
then
(
function
(){
return
n
.
isInline
(
e
)?
Promise
.
resolve
(
n
.
inlineFormatting
(
e
)):
o
(
e
)}).
then
(
function
(
e
){
return
new
Promise
(
function
(
f
){
window
.
html2canvas
.
svg
.
fabric
.
loadSVGFromString
(
e
,
n
.
createCanvas
.
call
(
n
,
f
))})})}
var
o
=
e
(
"./xhr"
),
d
=
e
(
"./utils"
).
decode64
;
f
.
prototype
.
hasFabric
=
function
(){
return
window
.
html2canvas
.
svg
&&
window
.
html2canvas
.
svg
.
fabric
?
Promise
.
resolve
():
Promise
.
reject
(
new
Error
(
"html2canvas.svg.js is not loaded, cannot render svg"
))},
f
.
prototype
.
inlineFormatting
=
function
(
e
){
return
/^data:image
\/
svg
\+
xml;base64,/
.
test
(
e
)?
this
.
decode64
(
this
.
removeContentType
(
e
)):
this
.
removeContentType
(
e
)},
f
.
prototype
.
removeContentType
=
function
(
e
){
return
e
.
replace
(
/^data:image
\/
svg
\+
xml
(
;base64
)?
,/
,
""
)},
f
.
prototype
.
isInline
=
function
(
e
){
return
/^data:image
\/
svg
\+
xml/i
.
test
(
e
)},
f
.
prototype
.
createCanvas
=
function
(
e
){
var
n
=
this
;
return
function
(
f
,
o
){
var
d
=
new
window
.
html2canvas
.
svg
.
fabric
.
StaticCanvas
(
"c"
);
n
.
image
=
d
.
lowerCanvasEl
,
d
.
setWidth
(
o
.
width
).
setHeight
(
o
.
height
).
add
(
window
.
html2canvas
.
svg
.
fabric
.
util
.
groupSVGElements
(
f
,
o
)).
renderAll
(),
e
(
d
.
lowerCanvasEl
)}},
f
.
prototype
.
decode64
=
function
(
e
){
return
"function"
==
typeof
window
.
atob
?
window
.
atob
(
e
):
d
(
e
)},
n
.
exports
=
f
},{
"./utils"
:
26
,
"./xhr"
:
28
}],
24
:[
function
(
e
,
n
){
function
f
(
e
,
n
){
this
.
src
=
e
,
this
.
image
=
null
;
var
f
=
this
;
this
.
promise
=
n
?
new
Promise
(
function
(
n
,
o
){
f
.
image
=
new
Image
,
f
.
image
.
onload
=
n
,
f
.
image
.
onerror
=
o
,
f
.
image
.
src
=
"data:image/svg+xml,"
+
(
new
XMLSerializer
).
serializeToString
(
e
),
f
.
image
.
complete
===!
0
&&
n
(
f
.
image
)}):
this
.
hasFabric
().
then
(
function
(){
return
new
Promise
(
function
(
n
){
window
.
html2canvas
.
svg
.
fabric
.
parseSVGDocument
(
e
,
f
.
createCanvas
.
call
(
f
,
n
))})})}
var
o
=
e
(
"./svgcontainer"
);
f
.
prototype
=
Object
.
create
(
o
.
prototype
),
n
.
exports
=
f
},{
"./svgcontainer"
:
23
}],
25
:[
function
(
e
,
n
){
function
f
(
e
,
n
){
d
.
call
(
this
,
e
,
n
)}
function
o
(
e
,
n
,
f
){
return
e
.
length
>
0
?
n
+
f
.
toUpperCase
():
void
0
}
var
d
=
e
(
"./nodecontainer"
);
f
.
prototype
=
Object
.
create
(
d
.
prototype
),
f
.
prototype
.
applyTextTransform
=
function
(){
this
.
node
.
data
=
this
.
transform
(
this
.
parent
.
css
(
"textTransform"
))},
f
.
prototype
.
transform
=
function
(
e
){
var
n
=
this
.
node
.
data
;
switch
(
e
){
case
"lowercase"
:
return
n
.
toLowerCase
();
case
"capitalize"
:
return
n
.
replace
(
/
(
^|
\s
|:|-|
\(
|
\))([
a-z
])
/g
,
o
);
case
"uppercase"
:
return
n
.
toUpperCase
();
default
:
return
n
}},
n
.
exports
=
f
},{
"./nodecontainer"
:
14
}],
26
:[
function
(
e
,
n
,
f
){
f
.
smallImage
=
function
(){
return
"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
},
f
.
bind
=
function
(
e
,
n
){
return
function
(){
return
e
.
apply
(
n
,
arguments
)}},
f
.
decode64
=
function
(
e
){
var
n
,
f
,
o
,
d
,
i
,
t
,
l
,
s
,
u
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
,
a
=
e
.
length
,
p
=
""
;
for
(
n
=
0
;
a
>
n
;
n
+=
4
)
f
=
u
.
indexOf
(
e
[
n
]),
o
=
u
.
indexOf
(
e
[
n
+
1
]),
d
=
u
.
indexOf
(
e
[
n
+
2
]),
i
=
u
.
indexOf
(
e
[
n
+
3
]),
t
=
f
<<
2
|
o
>>
4
,
l
=
(
15
&
o
)
<<
4
|
d
>>
2
,
s
=
(
3
&
d
)
<<
6
|
i
,
p
+=
64
===
d
?
String
.
fromCharCode
(
t
):
64
===
i
||-
1
===
i
?
String
.
fromCharCode
(
t
,
l
):
String
.
fromCharCode
(
t
,
l
,
s
);
return
p
},
f
.
getBounds
=
function
(
e
){
if
(
e
.
getBoundingClientRect
){
var
n
=
e
.
getBoundingClientRect
(),
f
=
null
==
e
.
offsetWidth
?
n
.
width
:
e
.
offsetWidth
;
return
{
top
:
n
.
top
,
bottom
:
n
.
bottom
||
n
.
top
+
n
.
height
,
right
:
n
.
left
+
f
,
left
:
n
.
left
,
width
:
f
,
height
:
null
==
e
.
offsetHeight
?
n
.
height
:
e
.
offsetHeight
}}
return
{}},
f
.
offsetBounds
=
function
(
e
){
var
n
=
e
.
offsetParent
?
f
.
offsetBounds
(
e
.
offsetParent
):{
top
:
0
,
left
:
0
};
return
{
top
:
e
.
offsetTop
+
n
.
top
,
bottom
:
e
.
offsetTop
+
e
.
offsetHeight
+
n
.
top
,
right
:
e
.
offsetLeft
+
n
.
left
+
e
.
offsetWidth
,
left
:
e
.
offsetLeft
+
n
.
left
,
width
:
e
.
offsetWidth
,
height
:
e
.
offsetHeight
}},
f
.
parseBackgrounds
=
function
(
e
){
var
n
,
f
,
o
,
d
,
i
,
t
,
l
,
s
=
"
\
r
\
n "
,
u
=
[],
a
=
0
,
p
=
0
,
c
=
function
(){
n
&&
(
'"'
===
f
.
substr
(
0
,
1
)
&&
(
f
=
f
.
substr
(
1
,
f
.
length
-
2
)),
f
&&
l
.
push
(
f
),
"-"
===
n
.
substr
(
0
,
1
)
&&
(
d
=
n
.
indexOf
(
"-"
,
1
)
+
1
)
>
0
&&
(
o
=
n
.
substr
(
0
,
d
),
n
=
n
.
substr
(
d
)),
u
.
push
({
prefix
:
o
,
method
:
n
.
toLowerCase
(),
value
:
i
,
args
:
l
,
image
:
null
})),
l
=
[],
n
=
o
=
f
=
i
=
""
};
return
l
=
[],
n
=
o
=
f
=
i
=
""
,
e
.
split
(
""
).
forEach
(
function
(
e
){
if
(
!
(
0
===
a
&&
s
.
indexOf
(
e
)
>-
1
)){
switch
(
e
){
case
'"'
:
t
?
t
===
e
&&
(
t
=
null
):
t
=
e
;
break
;
case
"("
:
if
(
t
)
break
;
if
(
0
===
a
)
return
a
=
1
,
void
(
i
+=
e
);
p
++
;
break
;
case
")"
:
if
(
t
)
break
;
if
(
1
===
a
){
if
(
0
===
p
)
return
a
=
0
,
i
+=
e
,
void
c
();
p
--
}
break
;
case
","
:
if
(
t
)
break
;
if
(
0
===
a
)
return
void
c
();
if
(
1
===
a
&&
0
===
p
&&!
n
.
match
(
/^url$/i
))
return
l
.
push
(
f
),
f
=
""
,
void
(
i
+=
e
)}
i
+=
e
,
0
===
a
?
n
+=
e
:
f
+=
e
}}),
c
(),
u
}},{}],
27
:[
function
(
e
,
n
){
function
f
(
e
){
o
.
apply
(
this
,
arguments
),
this
.
type
=
"linear"
===
e
.
args
[
0
]?
o
.
TYPES
.
LINEAR
:
o
.
TYPES
.
RADIAL
}
var
o
=
e
(
"./gradientcontainer"
);
f
.
prototype
=
Object
.
create
(
o
.
prototype
),
n
.
exports
=
f
},{
"./gradientcontainer"
:
9
}],
28
:[
function
(
e
,
n
){
function
f
(
e
){
return
new
Promise
(
function
(
n
,
f
){
var
o
=
new
XMLHttpRequest
;
o
.
open
(
"GET"
,
e
),
o
.
onload
=
function
(){
200
===
o
.
status
?
n
(
o
.
responseText
):
f
(
new
Error
(
o
.
statusText
))},
o
.
onerror
=
function
(){
f
(
new
Error
(
"Network Error"
))},
o
.
send
()})}
n
.
exports
=
f
},{}]},{},[
4
])(
4
)});
\ No newline at end of file
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