(function(has, addtest, cssprop){ var toString = {}.toString, STR = "string", FN = "function" ; if(!has("dom")){ return; } addtest("canvas", function(g){ return has.isHostType(g, "CanvasRenderingContext2D"); }); addtest("canvas-webgl", function(g){ return has.isHostType(g, "WebGLRenderingContext"); }); addtest("canvas-text", function(g, d){ return has("canvas") && typeof d.createElement("canvas").getContext("2d").fillText == FN; }); var svgNS = "http://www.w3.org/2000/svg"; addtest("svg", function(g){ return ("SVGAngle" in g); }); addtest("svg-inlinesvg", function(g, d, el){ var supported = null; el.innerHTML = ""; supported = (el.firstChild && el.firstChild.namespaceURI) == svgNS; el.innerHTML = ""; return supported; }); addtest("svg-smil", function(g, d){ return has("dom-createelementns") && /SVG/.test(toString.call(d.createElementNS(svgNS, "animate"))); }); addtest("svg-clippaths", function(g, d){ return has("dom-createelementns") && /SVG/.test(toString.call(d.createElementNS(svgNS, "clipPath"))); }); addtest("vml", function(g, d, el){ /* Sources: http://en.wikipedia.org/wiki/Vector_Markup_Language http://msdn.microsoft.com/en-us/library/bb263897(v=VS.85).aspx http://www.svg-vml.net/Zibool-compar.htm */ el.innerHTML = ""; var supported = ("adj" in el.firstChild); el.innerHTML = ""; return supported; }); })(has, has.add, has.cssprop);