Skip to content

Commit be43292

Browse files
committed
Add annotation elements directly to the root SVG
1 parent cd5da9a commit be43292

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

sequence-annotations.js

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
var lineLength = 50;
2+
var titleIndent = {x:120, y:20};
3+
var fontSize = 16;
4+
var titleFontSize = 12;
5+
26
function draw(data) {
37
var numberOfLines = Math.max.apply(null, data.sequences.map(function (seq) {
48
return seq.sequence.length;
@@ -23,9 +27,7 @@ function drawLine(data, lineIndex, lineLength, numberOfLines) {
2327
var from = lineIndex * lineLength;
2428
var to = lineIndex * lineLength + lineLength;
2529
var rootGroup = svg.append("svg");
26-
var titleIndent = {x:120, y:20};
27-
var fontSize = 16;
28-
var titleFontSize = 12;
30+
2931

3032
rootGroup.selectAll("g.title")
3133
.data(data)
@@ -229,36 +231,36 @@ function drawAnnotation(startCharIndex, length, label) {
229231
}
230232

231233
function drawAnnotationInSVG(sequenceLineSVG, startCharIndex, length, label) {
232-
var firstSequence = sequenceLineSVG.selectAll("text.rna-seq").node();
234+
var firstSequence = sequenceLineSVG.selectAll("g.rna-seq").node();
233235
var firstSequenceFrame = firstSequence.getBBox();
234-
var lastSequenceFrame = sequenceLineSVG.selectAll("text.rna-seq")[0].pop().getBBox();
236+
var lastSequenceFrame = sequenceLineSVG.selectAll("g.rna-seq")[0].pop().getBBox();
235237
var letterRectWidth = firstSequenceFrame.width / firstSequence.textContent.length;
238+
var sequenceNum = sequenceLineSVG.selectAll("g.rna-seq").size();
239+
var sequenceLineSvgY = parseInt(sequenceLineSVG.node().getAttribute("y"));
240+
var frameX = titleIndent.x + startCharIndex * letterRectWidth;
241+
var frameY = sequenceLineSvgY + titleIndent.y;
236242

237243
function drawSurroundingFrame() {
238244
var annotationVMargin = 4;
239245

240-
var sequenceNum = data.length - 1;
241-
242-
sequenceLineSVG.append('rect')
246+
svg.append('rect')
243247
.attr("class", "annotation-rect")
244-
.attr("x", titleIndent.x + firstSequenceFrame.x + startCharIndex * letterRectWidth)
248+
.attr("x", frameX)
245249
.attr("width", letterRectWidth * length)
246-
.attr("y", titleIndent.y + firstSequenceFrame.y - annotationVMargin)
247-
.attr("height", lastSequenceFrame.y + lastSequenceFrame.height - firstSequenceFrame.y + fontSize * sequenceNum + 2 * annotationVMargin)
250+
.attr("y", frameY - annotationVMargin)
251+
.attr("height", sequenceNum * fontSize + 2 * annotationVMargin)
248252
.attr("fill-opacity", "0.0")
249253
.attr("stroke-width", "3")
250254
.attr("stroke", "#000");
251255
};
252256

253257
function drawLabel() {
254-
var labelVOffset = 10;
255-
var frameX = firstSequenceFrame.x + startCharIndex * letterRectWidth;
256-
var frameY = firstSequenceFrame.y - labelVOffset;
257-
sequenceLineSVG.append("g")
258-
.attr("transform", "translate(" + (titleIndent.x + frameX) + "," + (titleIndent.y + frameY) + ")")
258+
var labelVOffset = 8;
259+
svg.append("g")
260+
.attr("transform", "translate(" + frameX + "," + (frameY - labelVOffset) + ")")
259261
.append("text")
260262
.attr("class", "annotation-label")
261-
.text(labelCounter);
263+
.text(label);
262264
};
263265
drawSurroundingFrame();
264266
drawLabel();

0 commit comments

Comments
 (0)