1 pv.SvgScene.label = function(scenes) { 2 var e = scenes.$g.firstChild; 3 for (var i = 0; i < scenes.length; i++) { 4 var s = scenes[i]; 5 6 /* visible */ 7 if (!s.visible) continue; 8 var fill = pv.color(s.textStyle); 9 if (!fill.opacity) continue; 10 11 /* text-baseline, text-align */ 12 var x = 0, y = 0, dy = 0, anchor = "start"; 13 switch (s.textBaseline) { 14 case "middle": dy = ".35em"; break; 15 case "top": dy = ".71em"; y = s.textMargin; break; 16 case "bottom": y = "-" + s.textMargin; break; 17 } 18 switch (s.textAlign) { 19 case "right": anchor = "end"; x = "-" + s.textMargin; break; 20 case "center": anchor = "middle"; break; 21 case "left": x = s.textMargin; break; 22 } 23 24 e = this.expect("text", e); 25 e.setAttribute("pointer-events", "none"); 26 e.setAttribute("x", x); 27 e.setAttribute("y", y); 28 e.setAttribute("dy", dy); 29 e.setAttribute("text-anchor", anchor); 30 e.setAttribute("transform", 31 "translate(" + s.left + "," + s.top + ")" 32 + (s.textAngle ? " rotate(" + 180 * s.textAngle / Math.PI + ")" : "")); 33 e.setAttribute("fill", fill.color); 34 e.setAttribute("fill-opacity", fill.opacity); 35 e.style.font = s.font; 36 e.style.textShadow = s.textShadow; 37 if (e.firstChild) e.firstChild.nodeValue = s.text; 38 else e.appendChild(document.createTextNode(s.text)); 39 e = this.append(e, scenes, i); 40 } 41 return e; 42 }; 43