blob: 3724d4415ab47ef9d35a0910824817a5b6c1190e [file] [log] [blame]
/**
* Copyright (c) 2014 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* CEA LIST - Initial API and implementation
*/
var svgNS = "http://www.w3.org/2000/svg";
function validate() {
var elements = document.getElementsByTagName("text");
for (var i=0; i<elements.length; i++)
layoutText(elements.item(i))
}
function layoutText(element) {
var transform = element.getAttribute("transform");
if (transform == "")
layoutTextHorizontal(element);
else
layoutTextVertical(element);
}
function layoutTextHorizontal(element) {
var x = +element.getAttribute("x");
var width = +element.getAttribute("width");
var height = +element.getAttribute("height");
var anchor = element.getAttribute("text-anchor");
var text = element.textContent;
if (anchor == "middle")
x = x+width/2;
else if (anchor == "end")
x = x+width;
element.setAttribute("x", x);
element.setAttribute("dy", "1em");
var fontHeight = 0;
var bbox = element.getBBox();
if (bbox!=null)
fontHeight = bbox.height;
if (height == 0)
height = fontHeight;
var lines = element.textContent.split('\\n');
element.textContent = "";
for(var k=0; k<lines.length && height >= fontHeight; k++)
{
var words = lines[k].split(' ');
var tspan = document.createElementNS(svgNS, "tspan");
var text_node = document.createTextNode(words[0]);
tspan.appendChild(text_node);
element.appendChild(tspan);
if (k > 0) {
tspan.setAttribute("x", x);
tspan.setAttribute("dy", "1em");
}
height = height - fontHeight;
for(var i=1; i<words.length && height >= fontHeight; i++)
{
var len = tspan.firstChild.data.length;
tspan.firstChild.data += " " + words[i];
if (tspan.getComputedTextLength() > width)
{
tspan.firstChild.data = tspan.firstChild.data.slice(0, len);
tspan = document.createElementNS(svgNS, "tspan");
text_node = document.createTextNode(words[i]);
tspan.appendChild(text_node);
element.appendChild(tspan);
tspan.setAttribute("x", x);
tspan.setAttribute("dy", "1em");
height = height - fontHeight;
}
}
if (height < fontHeight)
while (i < words.length)
tspan.firstChild.data += " " + words[i++];
}
}
function layoutTextVertical(element) {
var x = +element.getAttribute("x");
var y = +element.getAttribute("y");
var width = +element.getAttribute("width");
var height = +element.getAttribute("height");
var anchor = element.getAttribute("text-anchor");
var text = element.getTextContent();
if (anchor == "middle")
y = y+height/2;
else if (anchor == "end")
y = y+height;
element.setAttribute("y", y);
element.setAttribute("dx", "0.9em");
element.setAttribute("dy", "0.45em");
var split = text.split("\\n");
element.setTextContent("");
for (var i=0; i<split.length; i++) {
var tspan = document.createElementNS(svgNS, "tspan");
tspan.setTextContent(split[i]);
if (i > 0) {
tspan.setAttribute("y", y);
tspan.setAttribute("dx", "1em");
tspan.setAttribute("dy", "0.5em");
}
element.appendChild(tspan);
}
}