diff --git a/build.xml b/build.xml
index 653faf5..3b0f9d7 100644
--- a/build.xml
+++ b/build.xml
@@ -23,7 +23,8 @@
-
+
+
diff --git a/build/html2canvas.js b/build/html2canvas.js
index f362d66..2060682 100644
--- a/build/html2canvas.js
+++ b/build/html2canvas.js
@@ -845,6 +845,9 @@ html2canvas.prototype.newElement = function(el,parentStack){
this.renderFormValue(el,bounds,stack);
}
break;
+ case "LI":
+ this.drawListItem(el,stack,bgbounds);
+ break;
}
@@ -1412,6 +1415,127 @@ html2canvas.prototype.setContextVariable = function(ctx,variable,value){
});
}
+}
+html2canvas.prototype.drawListItem = function(element,stack,elBounds){
+
+
+ var position = this.getCSS(element,"list-style-position",false);
+
+
+ var item = this.getListItem(element),
+ x,
+ y;
+
+ var type = this.getCSS(element,"list-style-type",false);
+
+ if (/^(decimal|decimal-leading-zero|upper-alpha|upper-latin|upper-roman|lower-alpha|lower-greek|lower-latin|lower-roman)$/i.test(type)){
+ // TODO remove jQuery dependency
+ var currentIndex = $(element).index()+1,
+ text;
+
+ if (type == "decimal"){
+ text = currentIndex;
+ }else if (type == "decimal-leading-zero"){
+ if (currentIndex.toString().length == 1){
+ text = currentIndex = "0" + currentIndex.toString();
+ }else{
+ text = currentIndex.toString();
+ }
+
+ }else if (type == "upper-roman"){
+ text = this.getListRoman(currentIndex);
+ }else if (type == "lower-roman"){
+ text = this.getListRoman(currentIndex).toLowerCase();
+ }else if (type == "lower-alpha"){
+ text = this.getListAlpha(currentIndex).toLowerCase();
+ }else if (type == "upper-alpha"){
+ text = this.getListAlpha(currentIndex);
+ }
+
+ text += ". ";
+ var listBounds = this.getListPosition(element,text);
+
+ if (position == "inside"){
+ this.setFont(stack.ctx,element,false);
+ x = elBounds.left;
+ }else{
+ return; /* TODO really need to figure out some more accurate way to try and find the position.
+ as defined in http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position, it does not even have a specified "correct" position, so each browser
+ may display it whatever way it feels like.
+ "The position of the list-item marker adjacent to floats is undefined in CSS 2.1. CSS 2.1 does not specify the precise location of the marker box or its position in the painting order"
+ */
+ this.setFont(stack.ctx,element,true);
+ x = elBounds.left-10;
+ }
+
+ y = listBounds.bottom;
+
+
+ this.printText(text, x, y, stack.ctx);
+
+ }
+
+
+
+}
+
+html2canvas.prototype.getListPosition = function(element,val){
+ var boundElement = document.createElement("boundelement");
+ boundElement.style.display = "inline";
+ //boundElement.style.width = "1px";
+ //boundElement.style.height = "1px";
+
+ var type = element.style.listStyleType;
+ element.style.listStyleType = "none";
+
+ boundElement.appendChild(document.createTextNode(val));
+
+
+ element.insertBefore(boundElement,element.firstChild);
+
+
+ var bounds = this.getBounds(boundElement);
+ element.removeChild(boundElement);
+ element.style.listStyleType = type;
+ return bounds;
+
+
+}
+
+html2canvas.prototype.getListItem = function(element){
+
+
+
+ }
+
+
+html2canvas.prototype.getListAlpha = function(number){
+ var tmp = "";
+ do{
+ var modulus = number % 26;
+ tmp = String.fromCharCode((modulus) + 64) + tmp;
+ number = number / 26;
+ }while((number*26) > 26);
+
+ return tmp;
+}
+
+html2canvas.prototype.getListRoman = function(number){
+ var romanArray = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"],
+ decimal = [1000,900,500,400,100,90,50,40,10,9,5,4,1],
+ roman = "";
+
+ if (number <= 0 || number >= 4000) return;
+ for (var v=0; v= decimal[v]) {
+ number -= decimal[v];
+ roman += romanArray[v];
+ }
+ }
+
+ return roman;
+
+
}
html2canvas.prototype.newText = function(el,textNode,stack,form){
@@ -1420,9 +1544,7 @@ html2canvas.prototype.newText = function(el,textNode,stack,form){
var size = this.getCSS(el,"font-size");
var color = this.getCSS(el,"color");
- var bold = this.getCSS(el,"font-weight");
- var font_style = this.getCSS(el,"font-style");
- var font_variant = this.getCSS(el,"font-variant");
+
var text_decoration = this.getCSS(el,"text-decoration");
var text_align = this.getCSS(el,"text-align");
@@ -1436,14 +1558,7 @@ html2canvas.prototype.newText = function(el,textNode,stack,form){
//text = $.trim(text);
if (text.length>0){
- switch(bold){
- case 401:
- bold = "bold";
- break;
- case 400:
- bold = "normal";
- break;
- }
+
if (text_decoration!="none"){
@@ -1451,8 +1566,7 @@ html2canvas.prototype.newText = function(el,textNode,stack,form){
}
- var font = font_variant+" "+bold+" "+font_style+" "+size+" "+family,
- renderList,
+ var renderList,
renderWords = false;
@@ -1469,12 +1583,8 @@ html2canvas.prototype.newText = function(el,textNode,stack,form){
renderList = textNode.nodeValue.split("");
}
-
-
-
-
- this.setContextVariable(ctx,"fillStyle",color);
- this.setContextVariable(ctx,"font",font);
+ this.setFont(ctx,el,false);
+
/*
if (stack.clip){
@@ -1486,81 +1596,81 @@ html2canvas.prototype.newText = function(el,textNode,stack,form){
- var oldTextNode = textNode;
- for(var c=0;c0&&d>0){this.drawImage(c,f,g,i,d,e,h,j,d,e);break}default:a.top-=Math.ceil(a.top/f.height)*f.height;for(d=b.top+a.top;d
+b.top,b.width,b.height);break;case "no-repeat":var d=b.width-a.left,e=b.height-a.top,g=a.left,h=a.top,i=a.left+b.left,j=a.top+b.top;g<0?(g=Math.abs(g),i+=g,d=Math.min(b.width,f.width-g)):(d=Math.min(d,f.width),g=0);h<0?(h=Math.abs(h),j+=h,e=Math.min(b.height,f.height-h)):(e=Math.min(e,f.height),h=0);if(e>0&&d>0){this.drawImage(c,f,g,h,d,e,i,j,d,e);break}default:a.top-=Math.ceil(a.top/f.height)*f.height;for(d=b.top+a.top;d
e+d?e+d-d:f.height,d0&&(a.top+=g),d=Math.floor(d+f.height)-g}else this.log("Error loading background:"+d)}};html2canvas.prototype.backgroundImageUrl=function(a){a.substr(0,5)=='url("'?(a=a.substr(5),a=a.substr(0,a.length-2)):(a=a.substr(4),a=a.substr(0,a.length-1));return a};
html2canvas.prototype.getBackgroundPosition=function(a,b,c){var d=(this.getCSS(a,"backgroundPosition").split(",")[0]||"0 0").split(" "),e;d.length==1&&(a=d,d=[],d[0]=a,d[1]=a);d[0].toString().indexOf("%")!=-1?(e=parseFloat(d[0])/100,a=b.width*e-c.width*e):a=parseInt(d[0],10);d[1].toString().indexOf("%")!=-1?(e=parseFloat(d[1])/100,b=b.height*e-c.height*e):b=parseInt(d[1],10);c={};c.top=b;c.left=a;return c};
-html2canvas.prototype.drawbackgroundRepeatY=function(a,b,c,d,e,f,g){var i=Math.min(b.width,f),h;c.top-=Math.ceil(c.top/b.height)*b.height;for(h=e+c.top;hg+e?g+e-h:b.height,this.drawBackgroundRepeat(a,b,d+c.left,h,i,f,d,e),h=Math.floor(h+b.height)};
-html2canvas.prototype.drawbackgroundRepeatX=function(a,b,c,d,e,f,g){var g=Math.min(b.height,g),i,h;c.left-=Math.ceil(c.left/b.width)*b.width;for(h=d+c.left;hf+d?f+d-h:b.width,this.drawBackgroundRepeat(a,b,h,e+c.top,i,g,d,e),h=Math.floor(h+b.width)};html2canvas.prototype.drawBackgroundRepeat=function(a,b,c,d,e,f,g,i){var h=0,j=0;g-c>0&&(h=g-c);i-d>0&&(j=i-d);this.drawImage(a,b,h,j,e-h,f-j,c+h,d+j,e-h,f-j)};
+html2canvas.prototype.drawbackgroundRepeatY=function(a,b,c,d,e,f,g){var h=Math.min(b.width,f),i;c.top-=Math.ceil(c.top/b.height)*b.height;for(i=e+c.top;ig+e?g+e-i:b.height,this.drawBackgroundRepeat(a,b,d+c.left,i,h,f,d,e),i=Math.floor(i+b.height)};
+html2canvas.prototype.drawbackgroundRepeatX=function(a,b,c,d,e,f,g){var g=Math.min(b.height,g),h,i;c.left-=Math.ceil(c.left/b.width)*b.width;for(i=d+c.left;if+d?f+d-i:b.width,this.drawBackgroundRepeat(a,b,i,e+c.top,h,g,d,e),i=Math.floor(i+b.width)};html2canvas.prototype.drawBackgroundRepeat=function(a,b,c,d,e,f,g,h){var i=0,j=0;g-c>0&&(i=g-c);h-d>0&&(j=h-d);this.drawImage(a,b,i,j,e-i,f-j,c+i,d+j,e-i,f-j)};
html2canvas.prototype.getBorderData=function(a){var b=[],c=this;this.each(["top","right","bottom","left"],function(d,e){b.push({width:parseInt(c.getCSS(a,"border-"+e+"-width"),10),color:c.getCSS(a,"border-"+e+"-color")})});return b};
-html2canvas.prototype.drawBorders=function(a,b,c,d){var e=c.left,f=c.top,g=c.width,i=c.height,h=this.getBorderData(a),j=this;this.each(h,function(a,c){if(c.width>0){var k=e,o=f,n=g,p=i-h[2].width;switch(a){case 0:p=h[0].width;break;case 1:k=e+g-h[1].width;n=h[1].width;break;case 2:o=o+i-h[2].width;p=h[2].width;break;case 3:n=h[3].width}n={left:k,top:o,width:n,height:p};d&&(n=j.clipBounds(n,d));n.width>0&&n.height>0&&j.newRect(b,k,o,n.width,n.height,c.color)}});return h};
-html2canvas.prototype.newElement=function(a,b){var c=this.getBounds(a),d=c.left,e=c.top,f=c.width,g=c.height,i;i=this.getCSS(a,"background-color");var h=this.getCSS(a,"position"),b=b||{},j=this.setZ(this.getCSS(a,"zIndex"),h,b.zIndex,a.parentNode),l=this.getCSS(a,"opacity"),m={ctx:new this.storageContext,zIndex:j,opacity:l*b.opacity,cssPosition:h};if(b.clip)m.clip=$.extend({},b.clip),m.clip.height-=b.borders[2].width;if(this.opts.useOverflow&&/(hidden|scroll|auto)/.test(this.getCSS(a,"overflow"))&&
-!/(BODY)/i.test(a.nodeName))m.clip=m.clip?this.clipBounds(m.clip,c):c;h=j.children.push(m);l=j.children[h-1].ctx;this.setContextVariable(l,"globalAlpha",m.opacity);var k=this.drawBorders(a,l,c);m.borders=k;this.ignoreRe.test(a.nodeName)&&this.opts.iframeDefault!="transparent"&&(i=this.opts.iframeDefault=="default"?"#efefef":this.opts.iframeDefault);f={left:d+k[3].width,top:e+k[0].width,width:f-(k[1].width+k[3].width),height:g-(k[0].width+k[2].width)};m.clip&&(f=this.clipBounds(f,m.clip));f.height>
-0&&f.width>0&&(this.newRect(l,f.left,f.top,f.width,f.height,i),this.drawBackground(a,f,l));switch(a.nodeName){case "IMG":(i=this.loadImage(this.getAttr(a,"src")))?this.drawImage(l,i,0,0,i.width,i.height,d+parseInt(this.getCSS(a,"padding-left"),10)+k[3].width,e+parseInt(this.getCSS(a,"padding-top"),10)+k[0].width,c.width-(k[1].width+k[3].width+parseInt(this.getCSS(a,"padding-left"),10)+parseInt(this.getCSS(a,"padding-right"),10)),c.height-(k[0].width+k[2].width+parseInt(this.getCSS(a,"padding-top"),
-10)+parseInt(this.getCSS(a,"padding-bottom"),10))):this.log("Error loading
:"+this.getAttr(a,"src"));break;case "INPUT":/^(text|url|email|submit|button|reset)$/.test(a.type)&&a.value.length>0&&this.renderFormValue(a,c,m);break;case "TEXTAREA":a.value.length>0&&this.renderFormValue(a,c,m);break;case "SELECT":a.options.length>0&&this.renderFormValue(a,c,m)}return j.children[h-1]};html2canvas.prototype.printText=function(a,b,c,d){this.trim(a).length>0&&(d.fillText(a,b,c),this.numDraws++)};
-html2canvas.prototype.newRect=function(a,b,c,d,e,f){f!="transparent"&&(this.setContextVariable(a,"fillStyle",f),a.fillRect(b,c,d,e),this.numDraws++)};html2canvas.prototype.drawImage=function(a,b,c,d,e,f,g,i,h,j){a.drawImage(b,c,d,e,f,g,i,h,j);this.numDraws++};
+html2canvas.prototype.drawBorders=function(a,b,c,d){var e=c.left,f=c.top,g=c.width,h=c.height,i=this.getBorderData(a),j=this;this.each(i,function(a,c){if(c.width>0){var k=e,o=f,n=g,p=h-i[2].width;switch(a){case 0:p=i[0].width;break;case 1:k=e+g-i[1].width;n=i[1].width;break;case 2:o=o+h-i[2].width;p=i[2].width;break;case 3:n=i[3].width}n={left:k,top:o,width:n,height:p};d&&(n=j.clipBounds(n,d));n.width>0&&n.height>0&&j.newRect(b,k,o,n.width,n.height,c.color)}});return i};
+html2canvas.prototype.newElement=function(a,b){var c=this.getBounds(a),d=c.left,e=c.top,f=c.width,g=c.height,h;h=this.getCSS(a,"background-color");var i=this.getCSS(a,"position"),b=b||{},j=this.setZ(this.getCSS(a,"zIndex"),i,b.zIndex,a.parentNode),m=this.getCSS(a,"opacity"),l={ctx:new this.storageContext,zIndex:j,opacity:m*b.opacity,cssPosition:i};if(b.clip)l.clip=$.extend({},b.clip),l.clip.height-=b.borders[2].width;if(this.opts.useOverflow&&/(hidden|scroll|auto)/.test(this.getCSS(a,"overflow"))&&
+!/(BODY)/i.test(a.nodeName))l.clip=l.clip?this.clipBounds(l.clip,c):c;i=j.children.push(l);m=j.children[i-1].ctx;this.setContextVariable(m,"globalAlpha",l.opacity);var k=this.drawBorders(a,m,c);l.borders=k;this.ignoreRe.test(a.nodeName)&&this.opts.iframeDefault!="transparent"&&(h=this.opts.iframeDefault=="default"?"#efefef":this.opts.iframeDefault);f={left:d+k[3].width,top:e+k[0].width,width:f-(k[1].width+k[3].width),height:g-(k[0].width+k[2].width)};l.clip&&(f=this.clipBounds(f,l.clip));f.height>
+0&&f.width>0&&(this.newRect(m,f.left,f.top,f.width,f.height,h),this.drawBackground(a,f,m));switch(a.nodeName){case "IMG":(h=this.loadImage(this.getAttr(a,"src")))?this.drawImage(m,h,0,0,h.width,h.height,d+parseInt(this.getCSS(a,"padding-left"),10)+k[3].width,e+parseInt(this.getCSS(a,"padding-top"),10)+k[0].width,c.width-(k[1].width+k[3].width+parseInt(this.getCSS(a,"padding-left"),10)+parseInt(this.getCSS(a,"padding-right"),10)),c.height-(k[0].width+k[2].width+parseInt(this.getCSS(a,"padding-top"),
+10)+parseInt(this.getCSS(a,"padding-bottom"),10))):this.log("Error loading
:"+this.getAttr(a,"src"));break;case "INPUT":/^(text|url|email|submit|button|reset)$/.test(a.type)&&a.value.length>0&&this.renderFormValue(a,c,l);break;case "TEXTAREA":a.value.length>0&&this.renderFormValue(a,c,l);break;case "SELECT":a.options.length>0&&this.renderFormValue(a,c,l);break;case "LI":this.drawListItem(a,l,f)}return j.children[i-1]};
+html2canvas.prototype.printText=function(a,b,c,d){this.trim(a).length>0&&(d.fillText(a,b,c),this.numDraws++)};html2canvas.prototype.newRect=function(a,b,c,d,e,f){f!="transparent"&&(this.setContextVariable(a,"fillStyle",f),a.fillRect(b,c,d,e),this.numDraws++)};html2canvas.prototype.drawImage=function(a,b,c,d,e,f,g,h,i,j){a.drawImage(b,c,d,e,f,g,h,i,j);this.numDraws++};
html2canvas.prototype.renderFormValue=function(a,b,c){var d=document.createElement("valuewrap"),e=this;this.each(["lineHeight","textAlign","fontFamily","color","fontSize","paddingLeft","paddingTop","width","height","border","borderLeftWidth","borderTopWidth"],function(b,c){d.style[c]=e.getCSS(a,c)});d.style.borderColor="black";d.style.borderStyle="solid";d.style.display="block";d.style.position="absolute";if(/^(submit|reset|button|text|password)$/.test(a.type)||a.nodeName=="SELECT")d.style.lineHeight=
e.getCSS(a,"height");d.style.top=b.top+"px";d.style.left=b.left+"px";b=document.createTextNode(a.nodeName=="SELECT"?a.options[a.selectedIndex].text:a.value);d.appendChild(b);$("body").append(d);this.newText(a,b,c);$(d).remove()};
html2canvas.prototype.getImages=function(a){var b=this;this.ignoreRe.test(a.nodeName)||this.each($(a).contents(),function(a,d){RegExp("("+this.ignoreElements+")").test(d.nodeName)||b.getImages(d)});if(a.nodeType==1||typeof a.nodeType=="undefined")(a=this.getCSS(a,"background-image"))&&a!="1"&&a!="none"&&a.substring(0,7)!="-webkit"&&a.substring(0,3)!="-o-"&&a.substring(0,4)!="-moz"&&this.preloadImage(this.backgroundImageUrl(a.split(",")[0]))};
@@ -36,10 +36,14 @@ html2canvas.prototype.Renderer=function(a){var b=this;this.log("Renderer initiat
html2canvas.prototype.canvasRenderContext=function(a,b){b.textBaseline="bottom";var c=this;a.clip&&(b.save(),b.beginPath(),b.rect(a.clip.left,a.clip.top,a.clip.width,a.clip.height),b.clip());a.ctx.storage&&c.each(a.ctx.storage,function(a,e){switch(e.type){case "variable":b[e.name]=e.arguments;break;case "function":e.name=="fillRect"?b.fillRect(e.arguments[0],e.arguments[1],e.arguments[2],e.arguments[3]):e.name=="fillText"?b.fillText(e.arguments[0],e.arguments[1],e.arguments[2]):e.name=="drawImage"?
e.arguments[8]>0&&e.arguments[7]&&b.drawImage(e.arguments[0],e.arguments[1],e.arguments[2],e.arguments[3],e.arguments[4],e.arguments[5],e.arguments[6],e.arguments[7],e.arguments[8]):c.log(e)}});a.clip&&b.restore()};html2canvas.prototype.canvasRenderStorage=function(a,b){for(;00){switch(g){case 401:g="bold";break;case 400:g="normal"}if(j!=
-"none")var k=this.fontMetrics(d,e);d=h+" "+g+" "+i+" "+e+" "+d;l=l.replace(["-webkit-auto"],["auto"]);a=this.opts.letterRendering==!1&&/^(left|right|justify|auto)$/.test(l)&&/^(normal|none)$/.test(m)?b.nodeValue.split(/(\b| )/):b.nodeValue.split("");this.setContextVariable(c,"fillStyle",f);this.setContextVariable(c,"font",d);for(l=0;l26);return b};
+html2canvas.prototype.getListRoman=function(a){var b=["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"],c=[1E3,900,500,400,100,90,50,40,10,9,5,4,1],d="";if(!(a<=0||a>=4E3)){for(var e=0;e=c[e];)a-=c[e],d+=b[e];return d}};
+html2canvas.prototype.newText=function(a,b,c){var c=c.ctx,d=this.getCSS(a,"font-family"),e=this.getCSS(a,"font-size"),f=this.getCSS(a,"color"),g=this.getCSS(a,"text-decoration"),h=this.getCSS(a,"text-align"),i=this.getCSS(a,"letter-spacing");b.nodeValue=this.textTransform(b.nodeValue,this.getCSS(a,"text-transform"));if(this.trim(b.nodeValue).length>0){if(g!="none")var j=this.fontMetrics(d,e);h=h.replace(["-webkit-auto"],["auto"]);d=this.opts.letterRendering==!1&&/^(left|right|justify|auto)$/.test(h)&&
+/^(normal|none)$/.test(i)?b.nodeValue.split(/(\b| )/):b.nodeValue.split("");this.setFont(c,a,!1);a=b;for(b=0;b-1)return this.fontData[c+1];c=document.createElement("div");document.getElementsByTagName("body")[0].appendChild(c);$(c).css({visibility:"hidden",fontFamily:a,fontSize:b,margin:0,padding:0});var d=document.createElement("img");d.src="http://html2canvas.hertzen.com/images/8.jpg";d.width=1;d.height=1;$(d).css({margin:0,padding:0});var e=document.createElement("span");$(e).css({fontFamily:a,fontSize:b,margin:0,
padding:0});e.appendChild(document.createTextNode("Hidden Text"));c.appendChild(e);c.appendChild(d);var f=d.offsetTop-e.offsetTop+1;c.removeChild(e);c.appendChild(document.createTextNode("Hidden Text"));$(c).css("line-height","normal");$(d).css("vertical-align","super");d={baseline:f,lineWidth:1,middle:d.offsetTop-c.offsetTop+1};this.fontData.push(a+"-"+b);this.fontData.push(d);$(c).remove();return d};
html2canvas.prototype.textTransform=function(a,b){switch(b){case "lowercase":return a.toLowerCase();case "capitalize":return a.replace(/(^|\s|:|-|\(|\))([a-z])/g,function(a,b,e){return b+e.toUpperCase()});case "uppercase":return a.toUpperCase();default:return a}};html2canvas.prototype.trim=function(a){return a.replace(/^\s*/,"").replace(/\s*$/,"")};
diff --git a/src/Draw.js b/src/Draw.js
index 65be0fc..295c2f8 100644
--- a/src/Draw.js
+++ b/src/Draw.js
@@ -168,6 +168,9 @@ html2canvas.prototype.newElement = function(el,parentStack){
this.renderFormValue(el,bounds,stack);
}
break;
+ case "LI":
+ this.drawListItem(el,stack,bgbounds);
+ break;
}
diff --git a/src/Lists.js b/src/Lists.js
new file mode 100644
index 0000000..fc9e6f5
--- /dev/null
+++ b/src/Lists.js
@@ -0,0 +1,121 @@
+html2canvas.prototype.drawListItem = function(element,stack,elBounds){
+
+
+ var position = this.getCSS(element,"list-style-position",false);
+
+
+ var item = this.getListItem(element),
+ x,
+ y;
+
+ var type = this.getCSS(element,"list-style-type",false);
+
+ if (/^(decimal|decimal-leading-zero|upper-alpha|upper-latin|upper-roman|lower-alpha|lower-greek|lower-latin|lower-roman)$/i.test(type)){
+ // TODO remove jQuery dependency
+ var currentIndex = $(element).index()+1,
+ text;
+
+ if (type == "decimal"){
+ text = currentIndex;
+ }else if (type == "decimal-leading-zero"){
+ if (currentIndex.toString().length == 1){
+ text = currentIndex = "0" + currentIndex.toString();
+ }else{
+ text = currentIndex.toString();
+ }
+
+ }else if (type == "upper-roman"){
+ text = this.getListRoman(currentIndex);
+ }else if (type == "lower-roman"){
+ text = this.getListRoman(currentIndex).toLowerCase();
+ }else if (type == "lower-alpha"){
+ text = this.getListAlpha(currentIndex).toLowerCase();
+ }else if (type == "upper-alpha"){
+ text = this.getListAlpha(currentIndex);
+ }
+
+ text += ". ";
+ var listBounds = this.getListPosition(element,text);
+
+ if (position == "inside"){
+ this.setFont(stack.ctx,element,false);
+ x = elBounds.left;
+ }else{
+ return; /* TODO really need to figure out some more accurate way to try and find the position.
+ as defined in http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position, it does not even have a specified "correct" position, so each browser
+ may display it whatever way it feels like.
+ "The position of the list-item marker adjacent to floats is undefined in CSS 2.1. CSS 2.1 does not specify the precise location of the marker box or its position in the painting order"
+ */
+ this.setFont(stack.ctx,element,true);
+ x = elBounds.left-10;
+ }
+
+ y = listBounds.bottom;
+
+
+ this.printText(text, x, y, stack.ctx);
+
+ }
+
+
+
+}
+
+html2canvas.prototype.getListPosition = function(element,val){
+ var boundElement = document.createElement("boundelement");
+ boundElement.style.display = "inline";
+ //boundElement.style.width = "1px";
+ //boundElement.style.height = "1px";
+
+ var type = element.style.listStyleType;
+ element.style.listStyleType = "none";
+
+ boundElement.appendChild(document.createTextNode(val));
+
+
+ element.insertBefore(boundElement,element.firstChild);
+
+
+ var bounds = this.getBounds(boundElement);
+ element.removeChild(boundElement);
+ element.style.listStyleType = type;
+ return bounds;
+
+
+}
+
+html2canvas.prototype.getListItem = function(element){
+
+
+
+ }
+
+
+html2canvas.prototype.getListAlpha = function(number){
+ var tmp = "";
+ do{
+ var modulus = number % 26;
+ tmp = String.fromCharCode((modulus) + 64) + tmp;
+ number = number / 26;
+ }while((number*26) > 26);
+
+ return tmp;
+}
+
+html2canvas.prototype.getListRoman = function(number){
+ var romanArray = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"],
+ decimal = [1000,900,500,400,100,90,50,40,10,9,5,4,1],
+ roman = "";
+
+ if (number <= 0 || number >= 4000) return;
+ for (var v=0; v= decimal[v]) {
+ number -= decimal[v];
+ roman += romanArray[v];
+ }
+ }
+
+ return roman;
+
+
+}
\ No newline at end of file
diff --git a/src/Text.js b/src/Text.js
index a793533..ab10f40 100644
--- a/src/Text.js
+++ b/src/Text.js
@@ -5,9 +5,7 @@ html2canvas.prototype.newText = function(el,textNode,stack,form){
var size = this.getCSS(el,"font-size");
var color = this.getCSS(el,"color");
- var bold = this.getCSS(el,"font-weight");
- var font_style = this.getCSS(el,"font-style");
- var font_variant = this.getCSS(el,"font-variant");
+
var text_decoration = this.getCSS(el,"text-decoration");
var text_align = this.getCSS(el,"text-align");
@@ -21,14 +19,7 @@ html2canvas.prototype.newText = function(el,textNode,stack,form){
//text = $.trim(text);
if (text.length>0){
- switch(bold){
- case 401:
- bold = "bold";
- break;
- case 400:
- bold = "normal";
- break;
- }
+
if (text_decoration!="none"){
@@ -36,8 +27,7 @@ html2canvas.prototype.newText = function(el,textNode,stack,form){
}
- var font = font_variant+" "+bold+" "+font_style+" "+size+" "+family,
- renderList,
+ var renderList,
renderWords = false;
@@ -54,12 +44,8 @@ html2canvas.prototype.newText = function(el,textNode,stack,form){
renderList = textNode.nodeValue.split("");
}
-
-
-
-
- this.setContextVariable(ctx,"fillStyle",color);
- this.setContextVariable(ctx,"font",font);
+ this.setFont(ctx,el,false);
+
/*
if (stack.clip){
@@ -71,81 +57,81 @@ html2canvas.prototype.newText = function(el,textNode,stack,form){
- var oldTextNode = textNode;
- for(var c=0;c
+* @created 16.7.2011
+* @website http://hertzen.com
+-->
+
+
+
+ List tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - First
+ - Second
+ - Third
+
+
+
+
+ - First
+ - Second
new line
+
+ - Third
+
+
+
+
+
+
+
+
+