(function($){ if($.browser.msie && document.namespaces["v"] == null) { document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); var ss = document.createStyleSheet().owningElement; ss.styleSheet.cssText = "v\\:*{behavior:url(#default#VML);}" } $.fn.cornerz = function(options){ function canvasCorner(t,l, r,bw,bc,bg){ var sa,ea,cw,sx,sy,x,y, p = 1.57, css="position:absolute;"; if(t) {sa=-p; sy=r; y=0; css+="top:-"+bw+"px;"; } else {sa=p; sy=0; y=r; css+="bottom:-"+bw+"px;"; } if(l) {ea=p*2; sx=r; x=0; css+="left:-"+bw+"px;"} else {ea=0; sx=0; x=r; css+="right:-"+bw+"px;"; } var canvas=$(""); var ctx=canvas[0].getContext('2d'); ctx.beginPath(); ctx.lineWidth=bw*2; ctx.arc(sx,sy,r,sa,ea,!(t^l)); ctx.strokeStyle=bc; ctx.stroke(); ctx.lineWidth = 0; ctx.lineTo(x,y); ctx.fillStyle=bg; ctx.fill(); return canvas; }; function canvasCorners(corners, r, bw,bc,bg) { var hh = $("
"); $.each(corners.split(" "), function() { hh.append(canvasCorner(this[0]=="t",this[1]=="l", r,bw,bc,bg)); }); return hh; }; function vmlCurve(r,b,c,m,ml,mt, right_fix) { var l = m-ml-right_fix; var t = m-mt; return ""; } function vmlCorners(corners, r, bw, bc, bg, w) { var h ="
"; $.each($.trim(corners).split(" "), function() { var css,ml=1,mt=1,right_fix=0; if(this.charAt(0)=="t") { css="top:-"+bw+"px;"; } else { css= "bottom:-"+bw+"px;"; mt=r+1; } if(this.charAt(1)=="l") css+="left:-"+bw+"px;"; else { css +="right:-"+(bw)+"px; "; ml=r; right_fix = 1; } h+="
"; h+= ""; h+= vmlCurve(r*3,r+bw,bg, -r/2,ml,mt,right_fix); if(bw>0) h+= vmlCurve(r*2-bw,bw,bc, Math.floor(bw/2+0.5),ml,mt,right_fix); h+=""; h+= "
"; }); h += "
"; return h; }; var settings = { corners : "tl tr bl br", radius : 10, background: "white", borderWidth: 0, fixIE: true }; $.extend(settings, options || {}); var incrementProperty = function(elem, prop, x) { var y = parseInt(elem.css(prop)) || 0 ; elem.css(prop, x+y); } return this.each(function() { var $$ = $(this); var r = settings.radius*1.0; var bw = (settings.borderWidth || parseInt($$.css("borderTopWidth")) || 0)*1.0; var bg = settings.background; var bc = settings.borderColor; bc = bc || ( bw > 0 ? $$.css("borderTopColor") : bg); var cs = settings.corners; if($.browser.msie) { h = vmlCorners(cs,r,bw,bc,bg, $(this).width() ); this.innerHTML += h; } else $$.append(canvasCorners(cs,r,bw,bc,bg)); if(this.style.position != "absolute") this.style.position = "relative"; this.style.zoom = 1; if($.browser.msie && settings.fixIE) { var ow = $$.outerWidth(); var oh = $$.outerHeight(); if(ow%2 == 1) { incrementProperty($$, "padding-right", 1); incrementProperty($$, "margin-right", 1); } if(oh%2 == 1) { incrementProperty($$, "padding-bottom", 1); incrementProperty($$, "margin-bottom", 1); } } } ); }