以下是 js飘在文字上网页雪花效果特效代码 的示例演示效果:
部分效果截图:
HTML代码(index.html):
<!DOCTYPE html>
<html >
<head >
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>js网页雪花效果-对网页元素进行积雪效果的雪花特效</title>
</head>
<body>
<div style="background:#2684C2; width:100%; height:500px; line-height:500px; font-size:100px; text-align:center; color:#FFFFFF"><strong>内容</strong></div>
<script type="text/javascript" src="snow.src.js"></script>
</body>
</html>
JS代码(snow.src.js):
(function(e,t,n){
"use strict";
function r(e,t,n){
var r=e.runtimeStyle&&e.runtimeStyle[t],i,s=e.style;
return!/^-?[0-9]+\.?[0-9]*(?:px)?$/i.test(n)&&/^-?\d/.test(n)&&(i=s.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":n||0,n=s.pixelLeft+"px",s.left=i,r&&(e.runtimeStyle.left=r)),/^(thin|medium|thick)$/i.test(n)?n:Math.round(parseFloat(n))+"px"}
function i(e){
return parseInt(e,10)}
function s(e,t,i,s){
e=(e||"").split(","),e=e[s||0]||e[0]||"auto",e=f.Util.trimText(e).split(" ");
if(i!=="backgroundSize"||!!e[0]&&!e[0].match(/cover|contain|auto/)){
e[0]=e[0].indexOf("%")===-1?r(t,i+"X",e[0]):e[0];
if(e[1]===n){
if(i==="backgroundSize")return e[1]="auto",e;
e[1]=e[0]}
e[1]=e[1].indexOf("%")===-1?r(t,i+"Y",e[1]):e[1]}
return e}
function o(e,t,n,r,i,s){
var o=f.Util.getCSS(t,e,i),u,a,l,c;
o.length===1&&(c=o[0],o=[],o[0]=c,o[1]=c);
if(o[0].toString().indexOf("%")!==-1)l=parseFloat(o[0])/100,a=n.width*l,e!=="backgroundSize"&&(a-=(s||r).width*l);
else if(e==="backgroundSize")if(o[0]==="auto")a=r.width;
else if(/contain|cover/.test(o[0])){
var h=f.Util.resizeBounds(r.width,r.height,n.width,n.height,o[0]);
a=h.width,u=h.height}
else a=parseInt(o[0],10);
else a=parseInt(o[0],10);
return o[1]==="auto"?u=a/r.width*r.height:o[1].toString().indexOf("%")!==-1?(l=parseFloat(o[1])/100,u=n.height*l,e!=="backgroundSize"&&(u-=(s||r).height*l)):u=parseInt(o[1],10),[a,u]}
function u(e,t){
var n=[];
return{
storage:n,width:e,height:t,clip:function(){
n.push({
type:"function",name:"clip",arguments:arguments}
)}
,translate:function(){
n.push({
type:"function",name:"translate",arguments:arguments}
)}
,fill:function(){
n.push({
type:"function",name:"fill",arguments:arguments}
)}
,save:function(){
n.push({
type:"function",name:"save",arguments:arguments}
)}
,restore:function(){
n.push({
type:"function",name:"restore",arguments:arguments}
)}
,fillRect:function(){
n.push({
type:"function",name:"fillRect",arguments:arguments}
)}
,createPattern:function(){
n.push({
type:"function",name:"createPattern",arguments:arguments}
)}
,drawShape:function(){
var e=[];
return n.push({
type:"function",name:"drawShape",arguments:e}
),{
moveTo:function(){
e.push({
name:"moveTo",arguments:arguments}
)}
,lineTo:function(){
e.push({
name:"lineTo",arguments:arguments}
)}
,arcTo:function(){
e.push({
name:"arcTo",arguments:arguments}
)}
,bezierCurveTo:function(){
e.push({
name:"bezierCurveTo",arguments:arguments}
)}
,quadraticCurveTo:function(){
e.push({
name:"quadraticCurveTo",arguments:arguments}
)}
}
}
,drawImage:function(){
n.push({
type:"function",name:"drawImage",arguments:arguments}
)}
,fillText:function(){
n.push({
type:"function",name:"fillText",arguments:arguments}
)}
,setVariable:function(e,t){
return n.push({
type:"variable",name:e,arguments:t}
),t}
}
}
function a(e){
return{
zindex:e,children:[]}
}
var f={
}
,l,c,h;
f.Util={
}
,f.Util.log=function(t){
f.logging&&e.console&&e.console.log&&e.console.log(t)}
,f.Util.trimText=function(e){
return function(t){
return e?e.apply(t):((t||"")+"").replace(/^\s+|\s+$/g,"")}
}
(String.prototype.trim),f.Util.asFloat=function(e){
return parseFloat(e)}
,function(){
var e=/((rgba|rgb)\([^\)]+\)(\s-?\d+px){
0,}
)/g,t=/(-?\d+px)|(#.+)|(rgb\(.+\))|(rgba\(.+\))/g;
f.Util.parseTextShadows=function(n){
if(!n||n==="none")return[];
var r=n.match(e),i=[];
for(var s=0;
r&&s<r.length;
s++){
var o=r[s].match(t);
i.push({
color:o[0],offsetX:o[1]?o[1].replace("px",""):0,offsetY:o[2]?o[2].replace("px",""):0,blur:o[3]?o[3].replace("px",""):0}
)}
return i}
}
(),f.Util.parseBackgroundImage=function(e){
var t=" \r\n",n,r,i,s,o,u=[],a,f=0,l=0,c,h,p=function(){
n&&(r.substr(0,1)==='"'&&(r=r.substr(1,r.length-2)),r&&h.push(r),n.substr(0,1)==="-"&&(s=n.indexOf("-",1)+1)>0&&(i=n.substr(0,s),n=n.substr(s)),u.push({
prefix:i,method:n.toLowerCase(),value:o,args:h}
)),h=[],n=i=r=o=""}
;
p();
for(var d=0,v=e.length;
d<v;
d++){
a=e[d];
if(f===0&&t.indexOf(a)>-1)continue;
switch(a){
case'"':c?c===a&&(c=null):c=a;
break;
case"(":if(c)break;
if(f===0){
f=1,o+=a;
continue}
l++;
break;
case")":if(c)break;
if(f===1){
if(l===0){
f=0,o+=a,p();
continue}
l--}
break;
case",":if(c)break;
if(f===0){
p();
continue}
if(f===1&&l===0&&!n.match(/^url$/i)){
h.push(r),r="",o+=a;
continue}
}
o+=a,f===0?n+=a:r+=a}
return p(),u}
,f.Util.Bounds=function(e){
var t,n={
}
;
return e.getBoundingClientRect&&(t=e.getBoundingClientRect(),n.top=t.top,n.bottom=t.bottom||t.top+t.height,n.left=t.left,n.width=e.offsetWidth,n.height=e.offsetHeight),n}
,f.Util.OffsetBounds=function(e){
var t=e.offsetParent?f.Util.OffsetBounds(e.offsetParent):{
top:0,left:0}
;
return{
top:e.offsetTop+t.top,bottom:e.offsetTop+e.offsetHeight+t.top,left:e.offsetLeft+t.left,width:e.offsetWidth,height:e.offsetHeight}
}
,f.Util.getCSS=function(e,n,r){
l!==e&&(c=t.defaultView.getComputedStyle(e,null));
var o=c[n];
if(/^background(Size|Position)$/.test(n))return s(o,e,n,r);
if(/border(Top|Bottom)(Left|Right)Radius/.test(n)){
var u=o.split(" ");
return u.length<=1&&(u[1]=u[0]),u.map(i)}
return o}
,f.Util.resizeBounds=function(e,t,n,r,i){
var s=n/r,o=e/t,u,a;
return!i||i==="auto"?(u=n,a=r):s<o^i==="contain"?(a=r,u=r*o):(u=n,a=n/o),{
width:u,height:a}
}
,f.Util.BackgroundPosition=function(e,t,n,r,i){
var s=o("backgroundPosition",e,t,n,r,i);
return{
left:s[0],top:s[1]}
}
,f.Util.BackgroundSize=function(e,t,n,r){
var i=o("backgroundSize",e,t,n,r);
return{
width:i[0],height:i[1]}
}
,f.Util.Extend=function(e,t){
for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);
return t}
,f.Util.Children=function(e){
var t;
try{
t=e.nodeName&&e.nodeName.toUpperCase()==="IFRAME"?e.contentDocument||e.contentWindow.document:function(e){
var t=[];
return e!==null&&function(e,t){
var r=e.length,i=0;
if(typeof t.length=="number")for(var s=t.length;
i<s;
i++)e[r++]=t[i];
else while(t[i]!==n)e[r++]=t[i++];
return e.length=r,e}
(t,e),t}
(e.childNodes)}
catch(r){
f.Util.log("html2canvas.Util.Children failed with exception:"+r.message),t=[]}
return t}
,f.Util.isTransparent=function(e){
return e==="transparent"||e==="rgba(0,0,0,0)"}
,f.Util.Font=function(){
var e={
}
;
return function(t,r,i){
if(e[t+"-"+r]!==n)return e[t+"-"+r];
var s=i.createElement("div"),o=i.createElement("img"),u=i.createElement("span"),a="Hidden Text",f,l,c;
return s.style.visibility="hidden",s.style.fontFamily=t,s.style.fontSize=r,s.style.margin=0,s.style.padding=0,i.body.appendChild(s),o.src="data:image/gif;
base64,R0lGODlhAQABAIABAP///wAAACwAAAAAAQABAAACAkQBADs=",o.width=1,o.height=1,o.style.margin=0,o.style.padding=0,o.style.verticalAlign="baseline",u.style.fontFamily=t,u.style.fontSize=r,u.style.margin=0,u.style.padding=0,u.appendChild(i.createTextNode(a)),s.appendChild(u),s.appendChild(o),f=o.offsetTop-u.offsetTop+1,s.removeChild(u),s.appendChild(i.createTextNode(a)),s.style.lineHeight="normal",o.style.verticalAlign="super",l=o.offsetTop-s.offsetTop+1,c={
baseline:f,lineWidth:1,middle:l}
,e[t+"-"+r]=c,i.body.removeChild(s),c}
}
(),function(){
function e(e){
return function(t){
try{
e.addColorStop(t.stop,t.color)}
catch(r){
n.log(["failed to add color stop:",r,";
tried to add:",t])}
}
}
var n=f.Util,r={
}
;
f.Generate=r;
var i=[/^(-webkit-linear-gradient)\(([a-z\s]+)([\w\d\.\s,%\(\)]+)\)$/,/^(-o-linear-gradient)\(([a-z\s]+)([\w\d\.\s,%\(\)]+)\)$/,/^(-webkit-gradient)\((linear|radial),\s((?:\d{
1,3}
%?)\s(?:\d{
1,3}
%?),\s(?:\d{
1,3}
%?)\s(?:\d{
1,3}
%?))([\w\d\.\s,%\(\)\-]+)\)$/,/^(-moz-linear-gradient)\(((?:\d{
1,3}
%?)\s(?:\d{
1,3}
%?))([\w\d\.\s,%\(\)]+)\)$/,/^(-webkit-radial-gradient)\(((?:\d{
1,3}
%?)\s(?:\d{
1,3}
%?)),\s(\w+)\s([a-z\-]+)([\w\d\.\s,%\(\)]+)\)$/,/^(-moz-radial-gradient)\(((?:\d{
1,3}
%?)\s(?:\d{
1,3}
%?)),\s(\w+)\s?([a-z\-]*)([\w\d\.\s,%\(\)]+)\)$/,/^(-o-radial-gradient)\(((?:\d{
1,3}
%?)\s(?:\d{
1,3}
%?)),\s(\w+)\s([a-z\-]+)([\w\d\.\s,%\(\)]+)\)$/];
r.parseGradient=function(e,t){
var n,r,s=i.length,o,u,a,f,l,c,h,p,d,v;
for(r=0;
r<s;
r+=1){
o=e.match(i[r]);
if(o)break}
if(o)switch(o[1]){
case"-webkit-linear-gradient":case"-o-linear-gradient":n={
type:"linear",x0:null,y0:null,x1:null,y1:null,colorStops:[]}
,a=o[2].match(/\w+/g);
if(a){
f=a.length;
for(r=0;
r<f;
r+=1)switch(a[r]){
case"top":n.y0=0,n.y1=t.height;
break;
case"right":n.x0=t.width,n.x1=0;
break;
case"bottom":n.y0=t.height,n.y1=0;
break;
case"left":n.x0=0,n.x1=t.width}
}
n.x0===null&&n.x1===null&&(n.x0=n.x1=t.width/2),n.y0===null&&n.y1===null&&(n.y0=n.y1=t.height/2),a=o[3].match(/((?:rgb|rgba)\(\d{
1,3}
,\s\d{
1,3}
,\s\d{
1,3}
(?:,\s[0-9\.]+)?\)(?:\s\d{
1,3}
(?:%|px))?)+/g);
if(a){
f=a.length,l=1/Math.max(f-1,1);
for(r=0;
r<f;
r+=1)c=a[r].match(/((?:rgb|rgba)\(\d{
1,3}
,\s\d{
1,3}
,\s\d{
1,3}
(?:,\s[0-9\.]+)?\))\s*(\d{
1,3}
)?(%|px)?/),c[2]?(u=parseFloat(c[2]),c[3]==="%"?u/=100:u/=t.width):u=r*l,n.colorStops.push({
color:c[1],stop:u}
)}
break;
case"-webkit-gradient":n={
type:o[2]==="radial"?"circle":o[2],x0:0,y0:0,x1:0,y1:0,colorStops:[]}
,a=o[3].match(/(\d{
1,3}
)%?\s(\d{
1,3}
)%?,\s(\d{
1,3}
)%?\s(\d{
1,3}
)%?/),a&&(n.x0=a[1]*t.width/100,n.y0=a[2]*t.height/100,n.x1=a[3]*t.width/100,n.y1=a[4]*t.height/100),a=o[4].match(/((?:from|to|color-stop)\((?:[0-9\.]+,\s)?(?:rgb|rgba)\(\d{
1,3}
,\s\d{
1,3}
,\s\d{
1,3}
(?:,\s[0-9\.]+)?\)\))+/g);
if(a){
f=a.length;
for(r=0;
r<f;
r+=1)c=a[r].match(/(from|to|color-stop)\(([0-9\.]+)?(?:,\s)?((?:rgb|rgba)\(\d{
1,3}
,\s\d{
1,3}
,\s\d{
1,3}
(?:,\s[0-9\.]+)?\))\)/),u=parseFloat(c[2]),c[1]==="from"&&(u=0),c[1]==="to"&&(u=1),n.colorStops.push({
color:c[3],stop:u}
)}
break;
case"-moz-linear-gradient":n={
type:"linear",x0:0,y0:0,x1:0,y1:0,colorStops:[]}
,a=o[2].match(/(\d{
1,3}
)%?\s(\d{
1,3}
)%?/),a&&(n.x0=a[1]*t.width/100,n.y0=a[2]*t.height/100,n.x1=t.width-n.x0,n.y1=t.height-n.y0),a=o[3].match(/((?:rgb|rgba)\(\d{
1,3}
,\s\d{
1,3}
,\s\d{
1,3}
(?:,\s[0-9\.]+)?\)(?:\s\d{
1,3}
%)?)+/g);
if(a){
f=a.length,l=1/Math.max(f-1,1);
for(r=0;
r<f;
r+=1)c=a[r].match(/((?:rgb|rgba)\(\d{
1,3}
,\s\d{
1,3}
,\s\d{
1,3}
(?:,\s[0-9\.]+)?\))\s*(\d{
1,3}
)?(%)?/),c[2]?(u=parseFloat(c[2]),c[3]&&(u/=100)):u=r*l,n.colorStops.push({
color:c[1],stop:u}
)}
break;
case"-webkit-radial-gradient":case"-moz-radial-gradient":case"-o-radial-gradient":n={
type:"circle",x0:0,y0:0,x1:t.width,y1:t.height,cx:0,cy:0,rx:0,ry:0,colorStops:[]}
,a=o[2].match(/(\d{
1,3}
)%?\s(\d{
1,3}
)%?/),a&&(n.cx=a[1]*t.width/100,n.cy=a[2]*t.height/100),a=o[3].match(/\w+/),c=o[4].match(/[a-z\-]*/
);
if(a&&c)switch(c[0]){
case"farthest-corner":case"cover":case"":h=Math.sqrt(Math.pow(n.cx,2)+Math.pow(n.cy,2)),p=Math.sqrt(Math.pow(n.cx,2)+Math.pow(n.y1-n.cy,2)),d=Math.sqrt(Math.pow(n.x1-n.cx,2)+Math.pow(n.y1-n.cy,2)),v=Math.sqrt(Math.pow(n.x1-n.cx,2)+Math.pow(n.cy,2)),n.rx=n.ry=Math.max(h,p,d,v);
break;
case"closest-corner":h=Math.sqrt(Math.pow(n.cx,2)+Math.pow(n.cy,2)),p=Math.sqrt(Math.pow(n.cx,2)+Math.pow(n.y1-n.cy,2)),d=Math.sqrt(Math.pow(n.x1-n.cx,2)+Math.pow(n.y1-n.cy,2)),v=Math.sqrt(Math.pow(n.x1-n.cx,2)+Math.pow(n.cy,2)),n.rx=n.ry=Math.min(h,p,d,v);
break;
case"farthest-side":a[0]==="circle"?n.rx=n.ry=Math.max(n.cx,n.cy,n.x1-n.cx,n.y1-n.cy):(n.type=a[0],n.rx=Math.max(n.cx,n.x1-n.cx),n.ry=Math.max(n.cy,n.y1-n.cy));
break;
case"closest-side":case"contain":a[0]==="circle"?n.rx=n.ry=Math.min(n.cx,n.cy,n.x1-n.cx,n.y1-n.cy):(n.type=a[0],n.rx=Math.min(n.cx,n.x1-n.cx),n.ry=Math.min(n.cy,n.y1-n.cy))}
a=o[5].match(/((?:rgb|rgba)\(\d{
1,3}
,\s\d{
1,3}
,\s\d{
1,3}
(?:,\s[0-9\.]+)?\)(?:\s\d{
1,3}
(?:%|px))?)+/g);
if(a){
f=a.length,l=1/Math.max(f-1,1);
for(r=0;
r<f;
r+=1)c=a[r].match(/((?:rgb|rgba)\(\d{
1,3}
,\s\d{
1,3}
,\s\d{
1,3}
(?:,\s[0-9\.]+)?\))\s*(\d{
1,3}
)?(%|px)?/),c[2]?(u=parseFloat(c[2]),c[3]==="%"?u/=100:u/=t.width):u=r*l,n.colorStops.push({
color:c[1],stop:u}
)}
}
return n}
,r.Gradient=function(n,r){
if(r.width===0||r.height===0)return;
var i=t.createElement("canvas"),s=i.getContext("2d"),o,u;
i.width=r.width,i.height=r.height,o=f.Generate.parseGradient(n,r);
if(o)switch(o.type){
case"linear":u=s.createLinearGradient(o.x0,o.y0,o.x1,o.y1),o.colorStops.forEach(e(u)),s.fillStyle=u,s.fillRect(0,0,r.width,r.height);
break;
case"circle":u=s.createRadialGradient(o.cx,o.cy,0,o.cx,o.cy,o.rx),o.colorStops.forEach(e(u)),s.fillStyle=u,s.fillRect(0,0,r.width,r.height);
break;
case"ellipse":var a=t.createElement("canvas"),l=a.getContext("2d"),c=Math.max(o.rx,o.ry),h=c*2;
a.width=a.height=h,u=l.createRadialGradient(o.rx,o.ry,0,o.rx,o.ry,c),o.colorStops.forEach(e(u)),l.fillStyle=u,l.fillRect(0,0,h,h),s.fillStyle=o.colorStops[o.colorStops.length-1].color,s.fillRect(0,0,i.width,i.height),s.drawImage(a,o.cx-o.rx,o.cy-o.ry,2*o.rx,2*o.ry)}
return i}
,r.ListAlpha=function(e){
var t="",n;
do n=e%26,t=String.fromCharCode(n+64)+t,e/=26;
while(e*26>26);
return t}
,r.ListRoman=function(e){
var t=["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"],n=[1e3,900,500,400,100,90,50,40,10,9,5,4,1],r="",i,s=t.length;
if(e<=0||e>=4e3)return e;
for(i=0;
i<s;
i+=1)while(e>=n[i])e-=n[i],r+=t[i];
return r}
}
(),f.Parse=function(r,i){
function s(){
return Math.max(Math.max(lt.body.scrollWidth,lt.documentElement.scrollWidth),Math.max(lt.body.offsetWidth,lt.documentElement.offsetWidth),Math.max(lt.body.clientWidth,lt.documentElement.clientWidth))}
function o(){
return Math.max(Math.max(lt.body.scrollHeight,lt.documentElement.scrollHeight),Math.max(lt.body.offsetHeight,lt.documentElement.offsetHeight),Math.max(lt.body.clientHeight,lt.documentElement.clientHeight))}
function l(e,t){
var n=parseInt(vt(e,t),10);
return isNaN(n)?0:n}
function c(e,t,n,r,i,s){
s!=="transparent"&&(e.setVariable("fillStyle",s),e.fillRect(t,n,r,i),ft+=1)}
function h(e,t,n){
if(e.length>0)return t+n.toUpperCase()}
function p(e,t){
switch(t){
case"lowercase":return e.toLowerCase();
case"capitalize":return e.replace(/(^|\s|:|-|\(|\))([a-z])/g,h);
case"uppercase":return e.toUpperCase();
default:return e}
}
function d(e){
return/^(normal|none|0px)$/.test(e)}
function v(e,t,n,r){
e!==null&&ct.trimText(e).length>0&&(r.fillText(e,t,n),ft+=1)}
function m(e,t,n,r){
var i=!1,s=vt(t,"fontWeight"),o=vt(t,"fontFamily"),u=vt(t,"fontSize"),a=ct.parseTextShadows(vt(t,"textShadow"));
switch(parseInt(s,10)){
case 401:s="bold";
break;
case 400:s="normal"}
e.setVariable("fillStyle",r),e.setVariable("font",[vt(t,"fontStyle"),vt(t,"fontVariant"),s,u,o].join(" ")),e.setVariable("textAlign",i?"right":"left"),a.length&&(e.setVariable("shadowColor",a[0].color),e.setVariable("shadowOffsetX",a[0].offsetX),e.setVariable("shadowOffsetY",a[0].offsetY),e.setVariable("shadowBlur",a[0].blur));
if(n!=="none")return ct.Font(o,u,lt)}
function g(e,t,n,r,i){
switch(t){
case"underline":c(e,n.left,Math.round(n.top+r.baseline+r.lineWidth),n.width,1,i);
break;
case"overline":c(e,n.left,Math.round(n.top),n.width,1,i);
break;
case"line-through":c(e,n.left,Math.ceil(n.top+r.middle+r.lineWidth),n.width,1,i)}
}
function y(e,t,n,r,i){
var s;
if(ht.rangeBounds&&!i){
if(n!=="none"||ct.trimText(t).length!==0)s=b(t,e.node,e.textOffset);
e.textOffset+=t.length}
else if(e.node&&typeof e.node.nodeValue=="string"){
var o=r?e.node.splitText(t.length):null;
s=w(e.node,i),e.node=o}
return s}
function b(e,t,n){
var r=lt.createRange();
return r.setStart(t,n),r.setEnd(t,n+e.length),r.getBoundingClientRect()}
function w(e,t){
var n=e.parentNode,r=lt.createElement("wrapper"),i=e.cloneNode(!0);
r.appendChild(e.cloneNode(!0)),n.replaceChild(r,e);
var s=t?ct.OffsetBounds(r):ct.Bounds(r);
return n.replaceChild(i,r),s}
function E(e,t,n){
var r=n.ctx,s=vt(e,"color"),o=vt(e,"textDecoration"),u=vt(e,"textAlign"),a,f,l={
node:t,textOffset:0}
;
ct.trimText(t.nodeValue).length>0&&(t.nodeValue=p(t.nodeValue,vt(e,"textTransform")),u=u.replace(["-webkit-auto"],["auto"]),f=!i.letterRendering&&/^(left|right|justify|auto)$/.test(u)&&d(vt(e,"letterSpacing"))?t.nodeValue.split(/(\b| )/):t.nodeValue.split(""),a=m(r,e,o,s),i.chinese&&f.forEach(function(e,t){
/.*[\u4E00-\u9FA5].*$/.test(e)&&(e=e.split(""),e.unshift(t,1),f.splice.apply(f,e))}
),f.forEach(function(e,t){
var i=y(l,e,o,t<f.length-1,n.transform.matrix);
i&&(v(e,i.left,i.bottom,r),g(r,o,i,a,s))}
))}
function S(e,t){
var n=lt.createElement("boundelement"),r,i;
return n.style.display="inline",r=e.style.listStyleType,e.style.listStyleType="none",n.appendChild(lt.createTextNode(t)),e.insertBefore(n,e.firstChild),i=ct.Bounds(n),e.removeChild(n),e.style.listStyleType=r,i}
function x(e){
var t=-1,n=1,r=e.parentNode.childNodes;
if(e.parentNode){
while(r[++t]!==e)r[t].nodeType===1&&n++;
return n}
return-1}
function T(e,t){
var n=x(e),r;
switch(t){
case"decimal":r=n;
break;
case"decimal-leading-zero":r=n.toString().length===1?n="0"+n.toString():n.toString();
break;
case"upper-roman":r=f.Generate.ListRoman(n);
break;
case"lower-roman":r=f.Generate.ListRoman(n).toLowerCase();
break;
case"lower-alpha":r=f.Generate.ListAlpha(n).toLowerCase();
break;
case"upper-alpha":r=f.Generate.ListAlpha(n)}
return r+". "}
function N(e,t,n){
var r,i,s=t.ctx,o=vt(e,"listStyleType"),u;
if(/^(decimal|decimal-leading-zero|upper-alpha|upper-latin|upper-roman|lower-alpha|lower-greek|lower-latin|lower-roman)$/i.test(o)){
i=T(e,o),u=S(e,i),m(s,e,"none",vt(e,"color"));
if(vt(e,"listStylePosition")!=="inside")return;
s.setVariable("textAlign","left"),r=n.left,v(i,r,u.bottom,s)}
}
function C(e){
var t=r[e];
return t&&t.succeeded===!0?t.img:!1}
function k(e,t){
var n=Math.max(e.left,t.left),r=Math.max(e.top,t.top),i=Math.min(e.left+e.width,t.left+t.width),s=Math.min(e.top+e.height,t.top+t.height);
return{
left:n,top:r,width:i-n,height:s-r}
}
function L(e,t,n){
var r,i=t.cssPosition!=="static",s=i?vt(e,"zIndex"):"auto",o=vt(e,"opacity"),u=vt(e,"cssFloat")!=="none";
t.zIndex=r=a(s),r.isPositioned=i,r.isFloated=u,r.opacity=o,r.ownStacking=s!=="auto"||o<1,n&&n.zIndex.children.push(t)}
function A(e,t,n,r,i){
var s=l(t,"paddingLeft"),o=l(t,"paddingTop"),u=l(t,"paddingRight"),a=l(t,"paddingBottom");
R(e,n,0,0,n.width,n.height,r.left+s+i[3].width,r.top+o+i[0].width,r.width-(i[1].width+i[3].width+s+u),r.height-(i[0].width+i[2].width+o+a))}
function O(e){
return["Top","Right","Bottom","Left"].map(function(t){
return{
width:l(e,"border"+t+"Width"),color:vt(e,"border"+t+"Color")}
}
)}
function M(e){
return["TopLeft","TopRight","BottomRight","BottomLeft"].map(function(t){
return vt(e,"border"+t+"Radius")}
)}
function _(e,t,n,r){
var i=function(e,t,n){
return{
x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n}
}
;
return{
start:e,startControl:t,endControl:n,end:r,subdivide:function(s){
var o=i(e,t,s),u=i(t,n,s),a=i(n,r,s),f=i(o,u,s),l=i(u,a,s),c=i(f,l,s);
return[_(e,o,f,c),_(c,l,a,r)]}
,curveTo:function(e){
e.push(["bezierCurve",t.x,t.y,n.x,n.y,r.x,r.y])}
,curveToReversed:function(r){
r.push(["bezierCurve",n.x,n.y,t.x,t.y,e.x,e.y])}
}
}
function D(e,t,n,r,i,s,o){
t[0]>0||t[1]>0?(e.push(["line",r[0].start.x,r[0].start.y]),r[0].curveTo(e),r[1].curveTo(e)):e.push(["line",s,o]),(n[0]>0||n[1]>0)&&e.push(["line",i[0].start.x,i[0].start.y])}
function P(e,t,n,r,i,s,o){
var u=[];
return t[0]>0||t[1]>0?(u.push(["line",r[1].start.x,r[1].start.y]),r[1].curveTo(u)):u.push(["line",e.c1[0],e.c1[1]]),n[0]>0||n[1]>0?(u.push(["line",s[0].start.x,s[0].start.y]),s[0].curveTo(u),u.push(["line",o[0].end.x,o[0].end.y]),o[0].curveToReversed(u)):(u.push(["line",e.c2[0],e.c2[1]]),u.push(["line",e.c3[0],e.c3[1]])),t[0]>0||t[1]>0?(u.push(["line",i[1].end.x,i[1].end.y]),i[1].curveToReversed(u)):u.push(["line",e.c4[0],e.c4[1]]),u}
function H(e,t,n){
var r=e.left,i=e.top,s=e.width,o=e.height,u=t[0][0],a=t[0][1],f=t[1][0],l=t[1][1],c=t[2][0],h=t[2][1],p=t[3][0],d=t[3][1],v=s-f,m=o-h,g=s-c,y=o-d;
return{
topLeftOuter:yt(r,i,u,a).topLeft.subdivide(.5),topLeftInner:yt(r+n[3].width,i+n[0].width,Math.max(0,u-n[3].width),Math.max(0,a-n[0].width)).topLeft.subdivide(.5),topRightOuter:yt(r+v,i,f,l).topRight.subdivide(.5),topRightInner:yt(r+Math.min(v,s+n[3].width),i+n[0].width,v>s+n[3].width?0:f-n[3].width,l-n[0].width).topRight.subdivide(.5),bottomRightOuter:yt(r+g,i+m,c,h).bottomRight.subdivide(.5),bottomRightInner:yt(r+Math.min(g,s+n[3].width),i+Math.min(m,o+n[0].width),Math.max(0,c-n[1].width),Math.max(0,h-n[2].width)).bottomRight.subdivide(.5),bottomLeftOuter:yt(r,i+y,p,d).bottomLeft.subdivide(.5),bottomLeftInner:yt(r+n[3].width,i+y,Math.max(0,p-n[3].width),Math.max(0,d-n[2].width)).bottomLeft.subdivide(.5)}
}
function B(e,t,n,r,i){
var s=vt(e,"backgroundClip"),o=[];
switch(s){
case"content-box":case"padding-box":D(o,r[0],r[1],t.topLeftInner,t.topRightInner,i.left+n[3].width,i.top+n[0].width),D(o,r[1],r[2],t.topRightInner,t.bottomRightInner,i.left+i.width-n[1].width,i.top+n[0].width),D(o,r[2],r[3],t.bottomRightInner,t.bottomLeftInner,i.left+i.width-n[1].width,i.top+i.height-n[2].width),D(o,r[3],r[0],t.bottomLeftInner,t.topLeftInner,i.left+n[3].width,i.top+i.height-n[2].width);
break;
default:D(o,r[0],r[1],t.topLeftOuter,t.topRightOuter,i.left,i.top),D(o,r[1],r[2],t.topRightOuter,t.bottomRightOuter,i.left+i.width,i.top),D(o,r[2],r[3],t.bottomRightOuter,t.bottomLeftOuter,i.left+i.width,i.top+i.height),D(o,r[3],r[0],t.bottomLeftOuter,t.topLeftOuter,i.left,i.top+i.height)}
return o}
function j(e,t,n){
var r=t.left,i=t.top,s=t.width,o=t.height,u,a,f,l,c,h,p=M(e),d=H(t,p,n),v={
clip:B(e,d,n,p,t),borders:[]}
;
for(u=0;
u<4;
u++)if(n[u].width>0){
a=r,f=i,l=s,c=o-n[2].width;
switch(u){
case 0:c=n[0].width,h=P({
c1:[a,f],c2:[a+l,f],c3:[a+l-n[1].width,f+c],c4:[a+n[3].width,f+c]}
,p[0],p[1],d.topLeftOuter,d.topLeftInner,d.topRightOuter,d.topRightInner);
break;
case 1:a=r+s-n[1].width,l=n[1].width,h=P({
c1:[a+l,f],c2:[a+l,f+c+n[2].width],c3:[a,f+c],c4:[a,f+n[0].width]}
,p[1],p[2],d.topRightOuter,d.topRightInner,d.bottomRightOuter,d.bottomRightInner);
break;
case 2:f=f+o-n[2].width,c=n[2].width,h=P({
c1:[a+l,f+c],c2:[a,f+c],c3:[a+n[3].width,f],c4:[a+l-n[3].width,f]}
,p[2],p[3],d.bottomRightOuter,d.bottomRightInner,d.bottomLeftOuter,d.bottomLeftInner);
break;
case 3:l=n[3].width,h=P({
c1:[a,f+c+n[2].width],c2:[a,f],c3:[a+l,f+n[0].width],c4:[a+l,f+c]}
,p[3],p[0],d.bottomLeftOuter,d.bottomLeftInner,d.topLeftOuter,d.topLeftInner)}
v.borders.push({
args:h,color:n[u].color}
)}
return v}
function F(e,t){
var n=e.drawShape();
return t.forEach(function(e,t){
n[t===0?"moveTo":e[0]+"To"].apply(null,e.slice(1))}
),n}
function I(e,t,n){
n!=="transparent"&&(e.setVariable("fillStyle",n),F(e,t),e.fill(),ft+=1)}
function q(e,t,n){
var r=lt.createElement("valuewrap"),i=["lineHeight","textAlign","fontFamily","color","fontSize","paddingLeft","paddingTop","width","height","border","borderLeftWidth","borderTopWidth"],s,o;
i.forEach(function(t){
try{
r.style[t]=vt(e,t)}
catch(n){
ct.log("html2canvas:Parse:Exception caught in renderFormValue:"+n.message)}
}
),r.style.borderColor="black",r.style.borderStyle="solid",r.style.display="block",r.style.position="absolute";
if(/^(submit|reset|button|text|password)$/.test(e.type)||e.nodeName==="SELECT")r.style.lineHeight=vt(e,"height");
r.style.top=t.top+"px",r.style.left=t.left+"px",s=e.nodeName==="SELECT"?(e.options[e.selectedIndex]||0).text:e.value,s||(s=e.placeholder),o=lt.createTextNode(s),r.appendChild(o),dt.appendChild(r),E(e,o,n),dt.removeChild(r)}
function R(e){
e.drawImage.apply(e,Array.prototype.slice.call(arguments,1)),ft+=1}
function U(n,r){
var i=e.getComputedStyle(n,r);
if(!i||!i.content||i.content==="none"||i.content==="-moz-alt-content"||i.display==="none")return;
var s=i.content+"",o=s.substr(0,1);
o===s.substr(s.length-1)&&o.match(/'|"/)&&(s=s.substr(1,s.length-2));
var u=s.substr(0,3)==="url",a=t.createElement(u?"img":"span");
return a.className=mt+"-before "+mt+"-after",Object.keys(i).filter(z).forEach(function(e){
try{
a.style[e]=i[e]}
catch(t){
ct.log(["Tried to assign readonly property ",e,"Error:",t])}
}
),u?a.src=ct.parseBackgroundImage(s)[0].args[0]:a.innerHTML=s,a}
function z(t){
return isNaN(e.parseInt(t,10))}
function W(e,t){
var n=U(e,":before"),r=U(e,":after");
if(!n&&!r)return;
n&&(e.className+=" "+mt+"-before",e.parentNode.insertBefore(n,e),st(n,t,!0),e.parentNode.removeChild(n),e.className=e.className.replace(mt+"-before","").trim()),r&&(e.className+=" "+mt+"-after",e.appendChild(r),st(r,t,!0),e.removeChild(r),e.className=e.className.replace(mt+"-after","").trim())}
function X(e,t,n,r){
var i=Math.round(r.left+n.left),s=Math.round(r.top+n.top);
e.createPattern(t),e.translate(i,s),e.fill(),e.translate(-i,-s)}
function V(e,t,n,r,i,s,o,u){
var a=[];
a.push(["line",Math.round(i),Math.round(s)]),a.push(["line",Math.round(i+o),Math.round(s)]),a.push(["line",Math.round(i+o),Math.round(u+s)]),a.push(["line",Math.round(i),Math.round(u+s)]),F(e,a),e.save(),e.clip(),X(e,t,n,r),e.restore()}
function $(e,t,n){
c(e,t.left,t.top,t.width,t.height,n)}
function J(e,t,n,r,i){
var s=ct.BackgroundSize(e,t,r,i),o=ct.BackgroundPosition(e,t,r,i,s),u=vt(e,"backgroundRepeat").split(",").map(ct.trimText);
r=Q(r,s),u=u[i]||u[0];
switch(u){
case"repeat-x":V(n,r,o,t,t.left,t.top+o.top,99999,r.height);
break;
case"repeat-y":V(n,r,o,t,t.left+o.left,t.top,r.width,99999);
break;
case"no-repeat":V(n,r,o,t,t.left+o.left,t.top+o.top,r.width,r.height);
break;
default:X(n,r,o,{
top:t.top,left:t.left,width:r.width,height:r.height}
)}
}
function K(e,t,n){
var r=vt(e,"backgroundImage"),i=ct.parseBackgroundImage(r),s,o=i.length;
while(o--){
r=i[o];
if(!r.args||r.args.length===0)continue;
var u=r.method==="url"?r.args[0]:r.value;
s=C(u),s?J(e,t,n,s,o):ct.log("html2canvas:Error loading background:",r)}
}
function Q(e,t){
if(e.width===t.width&&e.height===t.height)return e;
var n,r=lt.createElement("canvas");
return r.width=t.width,r.height=t.height,n=r.getContext("2d"),R(n,e,0,0,e.width,e.height,0,0,t.width,t.height),r}
function G(e,t,n){
return e.setVariable("globalAlpha",vt(t,"opacity")*(n?n.opacity:1))}
function Y(e){
return e.replace("px","")}
function Z(e,t){
var n=vt(e,"transform")||vt(e,"-webkit-transform")||vt(e,"-moz-transform")||vt(e,"-ms-transform")||vt(e,"-o-transform"),r=vt(e,"transform-origin")||vt(e,"-webkit-transform-origin")||vt(e,"-moz-transform-origin")||vt(e,"-ms-transform-origin")||vt(e,"-o-transform-origin")||"0px 0px";
r=r.split(" ").map(Y).map(ct.asFloat);
var i;
if(n&&n!=="none"){
var s=n.match(bt);
if(s)switch(s[1]){
case"matrix":i=s[2].split(",").map(ct.trimText).map(ct.asFloat)}
}
return{
origin:r,matrix:i}
}
function et(e,t,n,r){
var a=u(t?n.width:s(),t?n.height:o()),f={
ctx:a,opacity:G(a,e,t),cssPosition:vt(e,"position"),borders:O(e),transform:r,clip:t&&t.clip?ct.Extend({
}
,t.clip):null}
;
return L(e,f,t),i.useOverflow===!0&&/(hidden|scroll|auto)/.test(vt(e,"overflow"))===!0&&/(BODY)/i.test(e.nodeName)===!1&&(f.clip=f.clip?k(f.clip,n):n),f}
function tt(e,t,n){
var r={
left:t.left+e[3].width,top:t.top+e[0].width,width:t.width-(e[1].width+e[3].width),height:t.height-(e[0].width+e[2].width)}
;
return n&&(r=k(r,n)),r}
function nt(e,t){
var n=t.matrix?ct.OffsetBounds(e):ct.Bounds(e);
return t.origin[0]+=n.left,t.origin[1]+=n.top,n}
function rt(e,t,n,r){
var i=Z(e,t),s=nt(e,i),o,u=et(e,t,s,i),a=u.borders,f=u.ctx,l=tt(a,s,u.clip),c=j(e,s,a),h=pt.test(e.nodeName)?"#efefef":vt(e,"backgroundColor");
F(f,c.clip),f.save(),f.clip(),l.height>0&&l.width>0&&!r?($(f,s,h),K(e,l,f)):r&&(u.backgroundColor=h),f.restore(),c.borders.forEach(function(e){
I(f,e.args,e.color)}
),n||W(e,u);
switch(e.nodeName){
case"IMG":(o=C(e.getAttribute("src")))?A(f,e,o,s,a):ct.log("html2canvas:Error loading <img>:"+e.getAttribute("src"));
break;
case"INPUT":/^(text|url|email|submit|button|reset)$/.test(e.type)&&(e.value||e.placeholder||"").length>0&&q(e,s,u);
break;
case"TEXTAREA":(e.value||e.placeholder||"").length>0&&q(e,s,u);
break;
case"SELECT":(e.options||e.placeholder||"").length>0&&q(e,s,u);
break;
case"LI":N(e,u,l);
break;
case"CANVAS":A(f,e,e,s,a)}
return u}
function it(e){
return vt(e,"display")!=="none"&&vt(e,"visibility")!=="hidden"&&!e.hasAttribute("data-html2canvas-ignore")}
function st(e,t,n){
it(e)&&(t=rt(e,t,n,!1)||t,pt.test(e.nodeName)||ot(e,t,n))}
function ot(e,t,n){
ct.Children(e).forEach(function(r){
r.nodeType===r.ELEMENT_NODE?st(r,t,n):r.nodeType===r.TEXT_NODE&&E(e,r,t)}
)}
function ut(){
var e=vt(t.documentElement,"backgroundColor"),n=ct.isTransparent(e)&&at===t.body,r=rt(at,null,!1,n);
return ot(at,r),n&&(e=r.backgroundColor),dt.removeChild(gt),{
backgroundColor:e,stack:r}
}
e.scroll(0,0);
var at=i.elements===n?t.body:i.elements[0],ft=0,lt=at.ownerDocument,ct=f.Util,ht=ct.Support(i,lt),pt=new RegExp("("+i.ignoreElements+")"),dt=lt.body,vt=ct.getCSS,mt="___html2canvas___pseudoelement",gt=lt.createElement("style");
gt.innerHTML="."+mt+'-before:before{
content:"" !important;
display:none !important;
}
'+"."+mt+'-after:after{
content:"" !important;
display:none !important;
}
',dt.appendChild(gt),r=r||{
}
;
var yt=function(e){
return function(t,n,r,i){
var s=r*e,o=i*e,u=t+r,a=n+i;
return{
topLeft:_({
x:t,y:a}
,{
x:t,y:a-o}
,{
x:u-s,y:n}
,{
x:u,y:n}
),topRight:_({
x:t,y:n}
,{
x:t+s,y:n}
,{
x:u,y:a-o}
,{
x:u,y:a}
),bottomRight:_({
x:u,y:n}
,{
x:u,y:n+o}
,{
x:t+s,y:a}
,{
x:t,y:a}
),bottomLeft:_({
x:u,y:a}
,{
x:u-s,y:a}
,{
x:t,y:n+o}
,{
x:t,y:n}
)}
}
}
(4*((Math.sqrt(2)-1)/3)),bt=/(matrix)\((.+)\)/;
return ut()}
,f.Preload=function(r){
function i(e){
N.href=e,N.href=N.href;
var t=N.protocol+N.host;
return t===m}
function s(){
g.log("html2canvas:start:images:"+v.numLoaded+" / "+v.numTotal+" (failed:"+v.numFailed+")"),!v.firstRun&&v.numLoaded>=v.numTotal&&(g.log("Finished loading images:# "+v.numTotal+" (failed:"+v.numFailed+")"),typeof r.complete=="function"&&r.complete(v))}
function o(t,i,o){
var u,a=r.proxy,f;
N.href=t,t=N.href,u="html2canvas_"+w++,o.callbackname=u,a.indexOf("?")>-1?a+="&":a+="?",a+="url="+encodeURIComponent(t)+"&callback="+u,f=S.createElement("script"),e[u]=function(t){
t.substring(0,6)==="error:"?(o.succeeded=!1,v.numLoaded++,v.numFailed++,s()):(d(i,o),i.src=t),e[u]=n;
try{
delete e[u]}
catch(r){
}
f.parentNode.removeChild(f),f=null,delete o.script,delete o.callbackname}
,f.setAttribute("type","text/javascript"),f.setAttribute("src",a),o.script=f,e.document.body.appendChild(f)}
function u(t,n){
var r=e.getComputedStyle(t,n),i=r.content;
i.substr(0,3)==="url"&&y.loadImage(f.Util.parseBackgroundImage(i)[0].args[0]),h(r.backgroundImage,t)}
function a(e){
u(e,":before"),u(e,":after")}
function l(e,t){
var r=f.Generate.Gradient(e,t);
r!==n&&(v[e]={
img:r,succeeded:!0}
,v.numTotal++,v.numLoaded++,s())}
function c(e){
return e&&e.method&&e.args&&e.args.length>0}
function h(e,t){
var r;
f.Util.parseBackgroundImage(e).filter(c).forEach(function(e){
e.method==="url"?y.loadImage(e.args[0]):e.method.match(/\-?gradient$/)&&(r===n&&(r=f.Util.Bounds(t)),l(e.value,r))}
)}
function p(e){
var t=!1;
try{
g.Children(e).forEach(p)}
catch(r){
}
try{
t=e.nodeType}
catch(i){
t=!1,g.log("html2canvas:failed to access some element's nodeType - Exception:"+i.message)}
if(t===1||t===n){
a(e);
try{
h(g.getCSS(e,"backgroundImage"),e)}
catch(r){
g.log("html2canvas:failed to get background-image - Exception:"+r.message)}
h(e)}
}
function d(t,i){
t.onload=function(){
i.timer!==n&&e.clearTimeout(i.timer),v.numLoaded++,i.succeeded=!0,t.onerror=t.onload=null,s()}
,t.onerror=function(){
if(t.crossOrigin==="anonymous"){
e.clearTimeout(i.timer);
if(r.proxy){
var n=t.src;
t=new Image,i.img=t,t.src=n,o(t.src,t,i);
return}
}
v.numLoaded++,v.numFailed++,i.succeeded=!1,t.onerror=t.onload=null,s()}
}
var v={
numLoaded:0,numFailed:0,numTotal:0,cleanupDone:!1}
,m,g=f.Util,y,b,w=0,E=r.elements[0]||t.body,S=E.ownerDocument,x=E.getElementsByTagName("img"),T=x.length,N=S.createElement("a"),C=function(e){
return e.crossOrigin!==n}
(new Image),k;
N.href=e.location.href,m=N.protocol+N.host,y={
loadImage:function(e){
var t,s;
e&&v[e]===n&&(t=new Image,e.match(/data:image\/.*;
base64,/i)?(t.src=e.replace(/url\(['"]{
0,}
|['"]{
0,}
\)$/ig,""),s=v[e]={
img:t}
,v.numTotal++,d(t,s)):i(e)||r.allowTaint===!0?(s=v[e]={
img:t}
,v.numTotal++,d(t,s),t.src=e):C&&!r.allowTaint&&r.useCORS?(t.crossOrigin="anonymous",s=v[e]={
img:t}
,v.numTotal++,d(t,s),t.src=e):r.proxy&&(s=v[e]={
img:t}
,v.numTotal++,o(e,t,s)))}
,cleanupDOM:function(i){
var o,u;
if(!v.cleanupDone){
i&&typeof i=="string"?g.log("html2canvas:Cleanup because:"+i):g.log("html2canvas:Cleanup after timeout:"+r.timeout+" ms.");
for(u in v)if(v.hasOwnProperty(u)){
o=v[u];
if(typeof o=="object"&&o.callbackname&&o.succeeded===n){
e[o.callbackname]=n;
try{
delete e[o.callbackname]}
catch(a){
}
o.script&&o.script.parentNode&&(o.script.setAttribute("src","about:blank"),o.script.parentNode.removeChild(o.script)),v.numLoaded++,v.numFailed++,g.log("html2canvas:Cleaned up failed img:'"+u+"' Steps:"+v.numLoaded+" / "+v.numTotal)}
}
e.stop!==n?e.stop():t.execCommand!==n&&t.execCommand("Stop",!1),t.close!==n&&t.close(),v.cleanupDone=!0,(!i||typeof i!="string")&&s()}
}
,renderingDone:function(){
k&&e.clearTimeout(k)}
}
,r.timeout>0&&(k=e.setTimeout(y.cleanupDOM,r.timeout)),g.log("html2canvas:Preload starts:finding background-images"),v.firstRun=!0,p(E),g.log("html2canvas:Preload:Finding images");
for(b=0;
b<T;
b+=1)y.loadImage(x[b].getAttribute("src"));
return v.firstRun=!1,g.log("html2canvas:Preload:Done."),v.numTotal===v.numLoaded&&s(),y}
,f.Renderer=function(e,r){
function i(e){
function t(e){
Object.keys(e).sort().forEach(function(n){
var i=[],s=[],o=[],u=[];
e[n].forEach(function(e){
e.node.zIndex.isPositioned||e.node.zIndex.opacity<1?o.push(e):e.node.zIndex.isFloated?s.push(e):i.push(e)}
),function a(e){
e.forEach(function(e){
u.push(e),e.children&&a(e.children)}
)}
(i.concat(s,o)),u.forEach(function(e){
e.context?t(e.context):r.push(e.node)}
)}
)}
var r=[],i;
return i=function(e){
function t(e,r,i){
var s=r.zIndex.zindex==="auto"?0:Number(r.zIndex.zindex),o=e,u=r.zIndex.isPositioned,a=r.zIndex.isFloated,f={
node:r}
,l=i;
if(r.zIndex.ownStacking)o=f.context={
"!":[{
node:r,children:[]}
]}
,l=n;
else if(u||a)l=f.children=[];
s===0&&i?i.push(f):(e[s]||(e[s]=[]),e[s].push(f)),r.zIndex.children.forEach(function(e){
t(o,e,l)}
)}
var r={
}
;
return t(r,e),r}
(e),t(i),r}
function s(e){
var t;
if(typeof r.renderer=="string"&&f.Renderer[e]!==n)t=f.Renderer[e](r);
else{
if(typeof e!="function")throw new Error("Unknown renderer");
t=e(r)}
if(typeof t!="function")throw new Error("Invalid renderer defined");
return t}
return s(r.renderer)(e,r,t,i(e.stack),f)}
,f.Util.Support=function(e,t){
function r(){
var e=new Image,r=t.createElement("canvas"),i=r.getContext===n?!1:r.getContext("2d");
if(i===!1)return!1;
r.width=r.height=10,e.src=["data:image/svg+xml,","<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10'>","<foreignObject width='10' height='10'>","<div xmlns='http://www.w3.org/1999/xhtml' style='width:10;
height:10;
'>","sup","</div>","</foreignObject>","</svg>"].join("");
try{
i.drawImage(e,0,0),r.toDataURL()}
catch(s){
return!1}
return f.Util.log("html2canvas:Parse:SVG powered rendering available"),!0}
function i(){
var e,n,r,i,s=!1;
return t.createRange&&(e=t.createRange(),e.getBoundingClientRect&&(n=t.createElement("boundtest"),n.style.height="123px",n.style.display="block",t.body.appendChild(n),e.selectNode(n),r=e.getBoundingClientRect(),i=r.height,i===123&&(s=!0),t.body.removeChild(n))),s}
return{
rangeBounds:i(),svgRendering:e.svgRendering&&r()}
}
,e.html2canvas=function(t,n){
t=t.length?t:[t];
var r,i,s={
logging:!1,elements:t,background:"#fff",proxy:null,timeout:0,useCORS:!1,allowTaint:!1,svgRendering:!1,ignoreElements:"IFRAME|OBJECT|PARAM",useOverflow:!0,letterRendering:!1,chinese:!1,width:null,height:null,taintTest:!0,renderer:"Canvas"}
;
return s=f.Util.Extend(n,s),f.logging=s.logging,s.complete=function(e){
if(typeof s.onpreloaded=="function"&&s.onpreloaded(e)===!1)return;
r=f.Parse(e,s);
if(typeof s.onparsed=="function"&&s.onparsed(r)===!1)return;
i=f.Renderer(r,s),typeof s.onrendered=="function"&&s.onrendered(i)}
,e.setTimeout(function(){
f.Preload(s)}
,0),{
render:function(e,t){
return f.Renderer(e,f.Util.Extend(t,s))}
,parse:function(e,t){
return f.Parse(e,f.Util.Extend(t,s))}
,preload:function(e){
return f.Preload(f.Util.Extend(e,s))}
,log:f.Util.log}
}
,e.html2canvas.log=f.Util.log,e.html2canvas.Renderer={
Canvas:n}
,f.Renderer.Canvas=function(e){
function r(e,t){
e.beginPath(),t.forEach(function(t){
e[t.name].apply(e,t.arguments)}
),e.closePath()}
function i(e){
if(u.indexOf(e.arguments[0].src)===-1){
l.drawImage(e.arguments[0],0,0);
try{
l.getImageData(0,0,1,1)}
catch(t){
return a=o.createElement("canvas"),l=a.getContext("2d"),!1}
u.push(e.arguments[0].src)}
return!0}
function s(t,n){
switch(n.type){
case"variable":t[n.name]=n.arguments;
break;
case"function":switch(n.name){
case"createPattern":if(n.arguments[0].width>0&&n.arguments[0].height>0)try{
t.fillStyle=t.createPattern(n.arguments[0],"repeat")}
catch(s){
c.log("html2canvas:Renderer:Error creating pattern",s.message)}
break;
case"drawShape":r(t,n.arguments);
break;
case"drawImage":n.arguments[8]>0&&n.arguments[7]>0&&(!e.taintTest||e.taintTest&&i(n))&&t.drawImage.apply(t,n.arguments);
break;
default:t[n.name].apply(t,n.arguments)}
}
}
e=e||{
}
;
var o=t,u=[],a=t.createElement("canvas"),l=a.getContext("2d"),c=f.Util,h=e.canvas||o.createElement("canvas");
return function(e,t,r,i,o){
var u=h.getContext("2d"),a,f,l,p=e.stack;
return h.width=h.style.width=t.width||p.ctx.width,h.height=h.style.height=t.height||p.ctx.height,l=u.fillStyle,u.fillStyle=c.isTransparent(p.backgroundColor)&&t.background!==n?t.background:e.backgroundColor,u.fillRect(0,0,h.width,h.height),u.fillStyle=l,i.forEach(function(e){
u.textBaseline="bottom",u.save(),e.transform.matrix&&(u.translate(e.transform.origin[0],e.transform.origin[1]),u.transform.apply(u,e.transform.matrix),u.translate(-e.transform.origin[0],-e.transform.origin[1])),e.clip&&(u.beginPath(),u.rect(e.clip.left,e.clip.top,e.clip.width,e.clip.height),u.clip()),e.ctx.storage&&e.ctx.storage.forEach(function(e){
s(u,e)}
),u.restore()}
),c.log("html2canvas:Renderer:Canvas renderer done - returning canvas obj"),t.elements.length===1&&typeof t.elements[0]=="object"&&t.elements[0].nodeName!=="BODY"?(f=o.Util.Bounds(t.elements[0]),a=r.createElement("canvas"),a.width=Math.ceil(f.width),a.height=Math.ceil(f.height),u=a.getContext("2d"),u.drawImage(h,f.left,f.top,f.width,f.height,0,0,f.width,f.height),h=null,a):h}
}
}
)(window,document);
var detectEdge=function(){
function e(e,t,s){
var o=n.createImageData(r,i),u=e.width,a=e.height,f=e.data,l=o.data,c=u*4,h=c+4,p=a-1,d=u-1,v=new Date;
for(var m=1;
m<p;
++m){
var g=h-4,y=g-c,b=g+c,w=-f[y]-f[g]-f[b],E=-f[++y]-f[++g]-f[++b],S=-f[++y]-f[++g]-f[++b],x=f[y+=2],T=f[g+=2],N=f[b+=2],C=-x-T-N,k=f[++y],L=f[++g],A=f[++b],O=-k-L-A,M=f[++y],_=f[++g],D=f[++b],P=-M-_-D;
for(var H=1;
H<d;
++H){
g=h+4,y=g-c,b=g+c;
var B=t+w-x-T*-8-N,j=t+E-k-L*-8-A,F=t+S-M-_*-8-D;
w=C,E=O,S=P,x=f[y],T=f[g],N=f[b],C=-x-T-N,k=f[++y],L=f[++g],A=f[++b],O=-k-L-A,M=f[++y],_=f[++g],D=f[++b],P=-M-_-D,s?(factor=.3*(B+C)+.59*(j+O)+.11*(F+P),l[h]=factor,l[++h]=factor,l[++h]=factor):(l[h]=B+C,l[++h]=j+O,l[++h]=F+P),l[++h]=255,++h}
h+=8}
return o}
function t(t){
var n=t.width,r=t.height,i=e(t,255,1),s=i.data,o=0;
for(var u=0;
u<r;
++u)for(var a=0;
a<n;
++a)s[o]<240?(s[o]=0,s[++o]=0,s[++o]=0):(s[o]=255,s[++o]=255,s[++o]=255),s[++o]=255,++o;
return i}
var n,r,i,s,o;
return function(e){
r=e.width,i=e.height,o=new Array(r),s=new Array(r),n=e.getContext("2d");
var u=n.getImageData(0,0,r,i),a=t(u),f=a.data;
for(var l=0;
l<r;
l++){
s[l]=new Array(i),o[l]=new Array(i);
for(var c=0;
c<i;
c++){
o[l][c]=0;
var h=(c*r+l)*4;
f[h]<255||f[h+1]<255||f[h+2]<255?(s[l][c]=!0,f[h]=f[h+1]=f[h+2]=255):f[h]=f[h+1]=f[h+2]=0}
}
return n.putImageData(a,0,0),{
dropPoints:s,dropCount:o,cw:r,ch:i}
}
}
();
Animation=function(){
"use strict";
function e(e,t){
e&&typeof e=="function"&&(i=e,s=t)}
function t(e){
return window.requestAnimationFrame?function(){
window.requestAnimationFrame(e)}
:window.msRequestAnimationFrame?function(){
window.msRequestAnimationFrame(e)}
:window.webkitRequestAnimationFrame?function(){
window.webkitRequestAnimationFrame(e)}
:window.mozRequestAnimationFrame?function(){
window.mozRequestAnimationFrame(e)}
:function(){
setTimeout(e,o)}
}
function n(){
i(s),u()}
function r(){
u=t(n),u()}
var i,s,o=16.7,u;
return{
addFrameRenderer:e,start:r}
}
(),Snowflakes=function(){
"use strict";
function e(e,n){
var r=new Image;
r.onload=function(){
for(var i=0;
i<h;
i++){
var s=document.createElement("canvas");
s.width=p,s.height=d;
var a=s.getContext("2d");
a.drawImage(r,i*p,0,p,d,0,0,p,d),c.push(s)}
e&&(u=e),n||(o=[]);
for(var i=0;
i<u;
i++)o.push(t())}
,r.src=l}
function t(){
var e=Math.random()*(E-w)+w,t=Math.random()*v.width,n=Math.random()*v.height;
return{
x:t,y:n,vv:Math.random()*(g-m)+m,hv:Math.random()*(b-y)+y,sw:e*p,sh:e*d,hsw:e*p*.5,hsh:e*d*.5,mhd:Math.random()*(x-S)+S,hd:0,hdi:Math.random()/(b*S),o:Math.random()*(N-T)+T,oi:Math.random()/C,si:Math.ceil(Math.random()*(h-1)),nl:!1}
}
function n(e){
P.globalAlpha=e.o,P.drawImage(c[e.si],0,0,p,d,e.x,e.y,e.sw,e.sh)}
function r(){
for(var e=0;
e<o.length;
e++){
var t=o[e],r=parseInt(t.x+t.hsw),i=parseInt(t.y+t.hsh);
if(j[r]&&j[r][i]&&!F[r][i]){
var s=0;
F[r]&&F[r][i-1]&&(s+=1),F[r+1]&&F[r+1][i-1]&&(s+=1),F[r+1]&&F[r+1][i]&&(s+=1),F[r+1]&&F[r+1][i+1]&&(s+=1),F[r]&&F[r][i+1]&&(s+=1),F[r-1]&&F[r-1][i+1]&&(s+=1),F[r-1]&&F[r-1][i]&&(s+=1),F[r-1]&&F[r-1][i-1]&&(s+=1);
if(s*Math.random()<1){
F[r][i]=1,n(t),t.y=0,t.x=Math.random()*v.width;
continue}
}
t.y+=t.vv*A,t.x+=(t.hd+t.hv)*A,t.hd+=t.hdi;
if(t.hd<-t.mhd||t.hd>t.mhd)t.hdi=-t.hdi;
t.o+=t.oi;
if(t.o>N||t.o<T)t.oi=-t.oi;
t.o>N&&(t.o=N),t.o<T&&(t.o=T);
var u=!1;
t.y>v.height+d/2&&(t.y=0,u=!0),t.y<0&&(t.y=v.height,u=!0),t.x>v.width+p/2&&(t.x=0,u=!0),t.x<0&&(t.x=v.width,u=!0),u&&(t.nl=!1)}
}
function i(e){
r(),e.clearRect(0,0,e.canvas.width,e.canvas.height);
for(var t=0;
t<o.length;
t++){
var n=o[t];
e.globalAlpha=n.o,e.drawImage(c[n.si],0,0,p,d,n.x,n.y,n.sw,n.sh)}
}
function s(t){
var n="position:absolute;
left:0;
top:0;
z-index:100001;
pointer-events:none;
";
v.width=t.cw,v.height=t.ch,e(t.flakeCount),D=document.createElement("canvas"),H=document.createElement("canvas"),D.style.cssText=n,H.style.cssText=n,document.body.appendChild(D),document.body.appendChild(H),P=D.getContext("2d"),B=H.getContext("2d"),D.width=H.width=t.cw,D.height=H.height=t.ch,j=t.dropPoints,F=t.dropCount,I=t.maxPointDrop,Animation.addFrameRenderer(i,B),Animation.start()}
var o=[],u=1,a=.1,f=2,l="http://p8.qhimg.com/d/inn/43158a81/Snowflakes.png",c=[],h=5,p=20,d=20,v={
}
,m=1,g=4,y=-1,b=3,w=.2,E=1.25,S=2,x=3,T=.2,N=.9,C=50,k=60,L=0,A=1,O=.1,M=1.5,_=.05,D,P,H,B,j,F,I;
return{
init:s}
}
(),html2canvas([document.body],{
onrendered:function(e){
try{
var t=detectEdge(e);
t.flakeCount=200,Snowflakes.init(t)}
catch(n){
}
}
}
);