Commit 8ae9c761 authored by Marc Duez's avatar Marc Duez

Merge commit '2e2df751'

parents afdeaac1 2e2df751
......@@ -44,12 +44,15 @@
<script type="text/javascript" src='js/lib/file.js'></script>
<script type="text/javascript" src='js/lib/jquery.zclip.js'></script>
<script type="text/javascript" src='js/compare.js'></script>
<script type="text/javascript" src='js/menu.js'></script>
<script type="text/javascript" src='js/dbscan.js'></script>
<script type="text/javascript" src='js/germline.js'></script>
<script type="text/javascript" src='js/germline_builder.js'></script>
<script type="text/javascript" src='js/segmenter.js'></script>
<script type="text/javascript" src='js/model.js'></script>
<script type="text/javascript" src='js/clone.js'></script>
<script type="text/javascript" src='js/list.js'></script>
<script type="text/javascript" src="js/axis.js"> </script>
<script type="text/javascript" src="js/graph.js"> </script>
......@@ -251,7 +254,7 @@
</div></div>
</div>
<div id="logo" style="float: right;" onclick="popupMsg(msg.welcome)">Vidjil <span class='logo'>(beta)</span></div>
<div id="logo" style="float: right;" onclick="myConsole.popupMsg(myConsole.msg.welcome)">Vidjil <span class='logo'>(beta)</span></div>
<div class="menu" style="float: right"> <a href="help" target="_blank">help</a></div>
......@@ -309,12 +312,12 @@
<div id="frame-container"></div>
<div id="popup-container">
<span class="closeButton" onclick="closePopupMsg()">X</span>
<span class="closeButton" onclick="myConsole.closePopupMsg()">X</span>
<div id="popup-msg"></div>
</div>
<div id="data-container">
<span class="closeButton" onclick="closeDataBox()">X</span>
<span class="closeButton" onclick="myConsole.closeDataBox()">X</span>
<div id="data-msg"></div>
</div>
......
......@@ -64,7 +64,7 @@ Axis.prototype = {
//clone position
this.pos = function(cloneID) {
var clone = self.m.windows[cloneID]
var clone = self.m.clone(cloneID)
if (typeof clone[geneType] != "undefined"
&& typeof clone[geneType][0] != "undefined"
&& typeof gene_list[clone[geneType][0].split("*")[0]] != "undefined")
......
......@@ -112,10 +112,10 @@ Builder.prototype = {
normalize_list.appendChild(document.createTextNode("none"))
normalize_list.appendChild(document.createElement("br"))
for (var i=0; i<self.m.windows.length; i++){
if (typeof self.m.windows[i].expected != "undefined"){
for (var i=0; i<self.m.n_windows; i++){
if (typeof self.m.clone(i).expected != "undefined"){
var input = document.createElement("input")
var text = document.createTextNode(self.m.getName(i) + " => " +self.m.windows[i].expected)
var text = document.createTextNode(self.m.clone(i).getName() + " => " +self.m.clone(i).expected)
input.value=i;
input.type = "radio"
input.name = "normalize_list"
......@@ -156,7 +156,7 @@ Builder.prototype = {
span1.className = "tagColorBox tagColor" + i
span1.onclick = function () {
var cloneID = parseInt(document.getElementById('tag_id').innerHTML);
self.m.changeTag(cloneID, i)
self.m.clone(cloneID).changeTag(i)
$('#tagSelector').hide('fast')
}
......@@ -164,7 +164,7 @@ Builder.prototype = {
span2.className = "tagName" + i + " tn"
span2.onclick = function () {
var cloneID = parseInt(document.getElementById('tag_id').innerHTML);
self.m.changeTag(cloneID, i)
self.m.clone(cloneID).changeTag(i)
$('#tagSelector').hide('fast')
}
......@@ -203,14 +203,14 @@ Builder.prototype = {
if (size>0 && size<1){
document.getElementById('normalized_size').value = ""
self.m.windows[cloneID].expected=size;
self.m.clone(cloneID).expected=size;
self.m.compute_normalization(cloneID, size)
self.m.update()
$('#tagSelector')
.hide('fast')
self.build_settings()
}else{
popupMsg("expected input between 0.0001 and 1")
myConsole.popupMsg("expected input between 0.0001 and 1")
}
}
......@@ -357,9 +357,9 @@ Builder.prototype = {
//init slider
var max_top = 0;
for (var i = 0; i < this.m.windows.length; i++) {
if (this.m.windows[i].top > max_top)
max_top = this.m.windows[i].top
for (var i = 0; i < this.m.n_windows; i++) {
if (this.m.clone(i).top > max_top)
max_top = this.m.clone(i).top
}
max_top = (Math.ceil(max_top / 5)) * 5
document.getElementById("top_slider")
......@@ -576,7 +576,7 @@ Builder.prototype = {
infoTime.appendChild(document.createTextNode("Info"));
infoTime.className = "button_right"
infoTime.onclick = function () {
dataBox(self.m.getPointHtmlInfo(self.m.t));
myConsole.dataBox(self.m.getPointHtmlInfo(self.m.t));
}
div_point.appendChild(infoTime)
......
This diff is collapsed.
......@@ -21,11 +21,31 @@
/* Com object display/store system message
*
* */
function Com(id, id2) {
this.flash_id = id;
this.log_id = id2;
function Com(flash_id, log_id, popup_id, data_id) {
this.flash_id = flash_id;
this.log_id = log_id;
this.popup_id = popup_id
this.data_id = data_id;
this.min_priority = 1; // minimum required to display message
this.log_container = document.getElementById(this.log_id);
this.msg = {
"align_error": "Error &ndash; connection to align server ("+return_URL_CGI()+") failed" + "</br> Please check your internet connection and retry." + "</br></br> <div class='center' > <button onclick='closePopupMsg()'>ok</button></div>",
"file_error": "Error &ndash; incorrect data file" + "</br> Please check you use a .data file generated by Vidjil." + "</br></br> <div class='center' > <button onclick='closePopupMsg()'>ok</button></div>",
"json_not_found":"Error &ndash; editDistanceFile.json not found" + "</br> Please to check the specified repository in the c++ program, or to run Vidjil program with the specified datas." + "</br></br> <div class='center'><button onclick='closePopupMsg()'>ok</button></div>",
"version_error": "Error &ndash; data file too old (version " + VIDJIL_JSON_VERSION + " required)" + "</br> This data file was generated by a too old version of Vidjil. " + "</br> Please regenerate a newer data file. " + "</br></br> <div class='center' > <button onclick='closePopupMsg()'>ok</button></div>",
"welcome": " <h2>Vidjil <span class='logo'>(beta)</span></h2>" + "(c) 2011-2014, the Vidjil team" + "<br />Marc Duez, Mathieu Giraud and Mikaël Salson" + " &ndash; <a href='http://www.vidjil.org'>http://www.vidjil.org/</a>" + "</br>" + "</br>Vidjil is developed by the <a href='http://www.lifl.fr/bonsai'>Bonsai bioinformatics team</a> (LIFL, CNRS, U. Lille 1, Inria Lille), in collaboration with the <a href='http://biologiepathologie.chru-lille.fr/organisation-fbp/91210.html'>department of Hematology</a> of CHRU Lille"
+ " the <a href='http://www.ircl.org/plate-forme-genomique.html'>Functional and Structural Genomic Platform</a> (U. Lille 2, IFR-114, IRCL)" + " and the <a href='http://www.euroclonality.org/'>EuroClonality-NGS</a> working group." + "<br/>" + "<br>Vidjil is free software, and you are welcome to redistribute it under <a href='http://git.vidjil.org/blob/master/doc/LICENSE'>certain conditions</a>. This software is for research use only and comes with no warranty." + "<br>" + "Please cite <a href='http://www.biomedcentral.com/1471-2164/15/409'>BMC Genomics 2014, 15:409</a> if you use Vidjil for your research." +"<br><br> <div class='center' > <button onclick='myConsole.closePopupMsg()'>start</button></div>",
"browser_error": "The web browser you are using has not been tested with Vidjil." + "</br>Note in particular that Vidjil is <b>not compatible</b> with Internet Explorer 9.0 or below." +"</br>For a better experience, we recommend to install one of those browsers : " + "</br> <a href='http://www.mozilla.org/'> Firefox </a> " + "</br> <a href='www.google.com/chrome/'> Chrome </a> " + "</br> <a href='http://www.chromium.org/getting-involved/download-chromium'> Chromium </a> " + "</br></br> <div class='center' > <button onclick='popupMsg(msg.welcome)'>I want to try anyway</button></div>",
}
}
Com.prototype = {
......@@ -90,6 +110,33 @@ Com.prototype = {
closeLog: function () {
$("#"+this.log_id).fadeToggle(200)
},
popupMsg: function (msg) {
document.getElementById(this.popup_id)
.style.display = "block";
document.getElementById(this.popup_id).lastElementChild
.innerHTML = msg;
},
closePopupMsg: function () {
document.getElementById(this.popup_id)
.style.display = "none";
document.getElementById(this.popup_id).lastElementChild
.innerHTML = "";
},
dataBox: function(msg) {
document.getElementById(this.data_id)
.style.display = "block";
document.getElementById(this.data_id).lastElementChild
.innerHTML = msg;
},
closeDataBox: function() {
document.getElementById(this.data_id)
.style.display = "none";
document.getElementById(this.data_id).lastElementChild
.innerHTML = "";
},
}
\ No newline at end of file
......@@ -15,6 +15,12 @@ function Database(id, db_address) {
}
}
function return_URL_CGI() {
if (typeof config != "undefined") return config.cgi_address;
else return "No_CGI_found";
}
Database.prototype = {
/*appel une page générée a partir des données du serveur
......@@ -73,7 +79,7 @@ Database.prototype = {
+ "Your browser currently does not recognize our SSL certificate. </br>"
+ "To use the sample database, you need to accept this certificate and/or tag this website as a trusted one. </br>"
+ "<a href='"+DB_ADDRESS+"'>Follow this link<a/>"
popupMsg(msg)
myConsole.popupMsg(msg)
}
},
......@@ -150,7 +156,7 @@ Database.prototype = {
if (status === "timeout") {
myConsole.flash("database : Timeout",2)
} else {
popupMsg(request.responseText);
myConsole.popupMsg(request.responseText);
}
}
});
......@@ -224,7 +230,7 @@ Database.prototype = {
if(status==="timeout") {
myConsole.flash("database : Timeout",2)
} else {
popupMsg(request + " " + status + " " + error);
myConsole.popupMsg(request + " " + status + " " + error);
}
}
});
......@@ -370,7 +376,7 @@ Database.prototype = {
if (status === "timeout") {
myConsole.flash("database : Timeout", 2)
} else {
popupMsg(request.responseText);
myConsole.popupMsg(request.responseText);
}
}
});
......@@ -398,7 +404,7 @@ Database.prototype = {
if (status === "timeout") {
myConsole.flash("database : Timeout", 2)
} else {
popupMsg(request.responseText);
myConsole.popupMsg(request.responseText);
}
}
});
......
......@@ -50,12 +50,12 @@ Germline.prototype = {
//reduce germline size (keep only detected genes)
//and add undetected genes
var g = {}
for (var i=0; i<this.m.windows.length; i++){
if (typeof this.m.windows[i][type] != "undefined"
&& typeof this.m.windows[i][type][0] != "undefined"){
var gene=this.m.windows[i][type][0];
if (this.m.system != "multi" || this.m.windows[i].system == system){
if ( typeof this.allele[gene] !="undefined"){
for (var i=0; i<this.m.n_windows; i++){
if (typeof this.m.clone(i)[type] != "undefined"
&& typeof this.m.clone(i)[type][0] != "undefined"){
var gene=this.m.clone(i)[type][0];
if (this.m.system != "multi" || this.m.clone(i).getSystem() == system){
if ( typeof this.allele[gene] != "undefined"){
g[gene] = this.allele[gene]
}else{
g[gene] = "unknow sequence"
......
......@@ -398,12 +398,12 @@ Graph.prototype = {
this.data_res[0].path = this.constructPathR(this.resolution1);
this.data_res[1].path = this.constructPathR(this.resolution5);
for (var i = 0; i < this.m.windows.length; i++) {
for (var i = 0; i < this.m.n_windows; i++) {
for (var j = 0; j < this.m.clones[i].cluster.length; j++) {
this.data_graph[this.m.clones[i].cluster[j]].path = this.constructPath(i, false);
}
}
for (var i = 0; i < this.m.windows.length; i++) {
for (var i = 0; i < this.m.n_windows; i++) {
var cloneID = i
for (var j = 0; j < this.m.clones[cloneID].cluster.length; j++) {
var seqID = this.m.clones[cloneID].cluster[j]
......@@ -426,7 +426,7 @@ Graph.prototype = {
console.log("bam")
var stack = new Stack(this.m)
stack.compute();
for (var i = 0; i < this.m.windows.length; i++) {
for (var i = 0; i < this.m.n_length; i++) {
this.data_graph[i].path = this.constructStack(i, stack);
}
},
......@@ -472,7 +472,7 @@ Graph.prototype = {
//volumes
this.g_graph
.style("fill", function (d) {
return self.m.windows[d.id].color;
return self.m.clone(d.id).getColor();
})
.style("stroke", "none")
.transition()
......@@ -493,10 +493,10 @@ Graph.prototype = {
}
})
.attr("class", function (p) {
var clone = self.m.windows[p.id]
if (!clone.active) return "graph_inactive";
if (clone.select) return "graph_select";
if (p.id == self.m.focus) return "graph_focus";
var clone = self.m.clone(p.id)
if (!clone.isActive()) return "graph_inactive";
if (clone.isSelected()) return "graph_select";
if (clone.isFocus()) return "graph_focus";
if (clone.top > self.display_limit) return "graph_inactive";
return "graph_line";
})
......@@ -508,7 +508,7 @@ Graph.prototype = {
this.g_graph
.style("fill", "none")
.style("stroke", function (d) {
return self.m.windows[d.id].color;
return self.m.clone(d.id).getColor();
})
.transition()
.duration(speed)
......@@ -528,10 +528,10 @@ Graph.prototype = {
}
})
.attr("class", function (p) {
var clone = self.m.windows[p.id]
if (!clone.active) return "graph_inactive";
if (clone.select) return "graph_select";
if (p.id == self.m.focus) return "graph_focus";
var clone = self.m.clone(p.id)
if (!clone.isActive()) return "graph_inactive";
if (clone.isSelected()) return "graph_select";
if (clone.isFocus()) return "graph_focus";
if (clone.top > self.display_limit) return "graph_inactive";
return "graph_line";
})
......@@ -780,8 +780,8 @@ Graph.prototype = {
var size = []
for (var i = 0; i < this.graph_col.length; i++) {
if (seq_size) size[i] = this.m.getSequenceSize(id, this.m.samples.order[i])
else size[i] = this.m.getSize(id, this.m.samples.order[i])
if (seq_size) size[i] = this.m.clone(id).getSequenceSize(this.m.samples.order[i])
else size[i] = this.m.clone(id).getSize(this.m.samples.order[i])
}
var x = this.graph_col[0];
......@@ -893,11 +893,11 @@ Stack.prototype = {
this.total_size = [];
for (j=0; j<this.m.samples.number; j++){
this.total_size[j]=0
for (i=0; i<this.m.windows.length; i++){
if (this.m.windows[i].active) this.total_size[j] += this.m.getSize(i,j); //active clones
for (i=0; i<this.m.n_windows; i++){
if (this.m.clone(i).isActive()) this.total_size[j] += this.m.clone(i).getSize(j); //active clones
}
this.total_size[j] += this.m.getSize(this.m.windows.length-1,j);//other clones
this.total_size[j] += this.m.clone(this.m.windows.length-1).getSize(j);//other clones
}
},
......@@ -910,14 +910,14 @@ Stack.prototype = {
this.sum[j]=1
}
for (i=0; i<this.m.windows.length; i++){
for (i=0; i<this.m.n_windows; i++){
this.min[i] = []
this.max[i] = []
//active clones
if (this.m.windows[i].active) {
if (this.m.clone(i).isActive()) {
for (j=0; j<this.m.samples.number; j++){
this.min[i][j] = this.sum[j]
this.sum[j] -= this.m.getSize(i,j)
this.sum[j] -= this.m.clone(i).getSize(j)
this.max[i][j] = this.sum[j]
}
}else{
......@@ -931,7 +931,7 @@ Stack.prototype = {
//other
for (j=0; j<this.m.samples.number; j++){
this.min[this.m.windows.length-1][j] = this.sum[j]
this.sum[this.m.windows.length-1] += this.m.getSize(this.m.windows.length-1,j)
this.sum[this.m.windows.length-1] += this.m.clone(this.m.windows.length-1).getSize(j)
this.max[this.m.windows.length-1][j] = this.sum[j]
}
......
This diff is collapsed.
......@@ -5,9 +5,7 @@ var CGI_ADDRESS = "http://127.0.1.1/cgi-bin/";
/*tools
*
* */
var myConsole = new Com("flash_container", "log_container")
var myConsole = new Com("flash_container", "log_container", "popup-container", "data-container")
/*load user config if exist
*
......@@ -71,23 +69,22 @@ if (typeof config != 'undefined') {
/* Model
*
* */
*/
var m = new Model();
/*appel a chaque changement de taille du navigateur*/
window.onresize = function () { m.resize(); };
/* views
*
* */
*/
var graph = new Graph("visu2",m);
var list = new List("list",m);
var sp = new ScatterPlot("visu",m, graph, stats);
var segment = new Segment("bot-container",m, CGI_ADDRESS);
var builder = new Builder(m);
var pdf = new PDF(m, "visu2_svg")
if (config.use_database) var db = new Database("plop!", DB_ADDRESS);
/* Stat object
*
*/
var stats = new Stats(sp);
......@@ -95,11 +92,6 @@ var stats = new Stats(sp);
*/
m.addSegment(segment);
/*
*
* */
if (config.use_database) var db = new Database("plop!", DB_ADDRESS);
if (location.search != ''){
var tmp = location.search.substring(1).split('&')
for (var i=0; i<tmp.length; i++){
......@@ -116,7 +108,7 @@ if (location.search != ''){
//wait 1sec to check ssl
setTimeout(function () { db.call("patient/index.html")}, 1000);
}else{
popupMsg(msg.welcome)
myConsole.popupMsg(myConsole.msg.welcome)
}
/*Statements and functions which allows to active the ALT key, and the movement of the SVG frame*/
......
/*
* This file is part of "Vidjil" <http://bioinfo.lifl.fr/vidjil>, V(D)J repertoire browsing and analysis
* Copyright (C) 2013, 2014 by Marc Duez <marc.duez@lifl.fr>, Antonin Carette <antonin.carette@etudiant.univ-lille1.fr> and the Vidjil Team
* Bonsai bioinformatics at LIFL (UMR CNRS 8022, Université Lille) and Inria Lille
*
* "Vidjil" is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* "Vidjil" is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with "Vidjil". If not, see <http://www.gnu.org/licenses/>
*/
function loadData() {
document.getElementById("file_menu")
.style.display = "block";
document.getElementById("analysis_menu")
.style.display = "none";
}
function loadAnalysis() {
document.getElementById("analysis_menu")
.style.display = "block";
document.getElementById("file_menu")
.style.display = "none";
}
function cancel() {
document.getElementById("analysis_menu")
.style.display = "none";
document.getElementById("file_menu")
.style.display = "none";
}
function showSelector(elem) {
$('.selector')
.stop()
$('.selector')
.css('display', 'none');
$('#' + elem)
.css('display', 'block')
.animate({
height: $('#' + elem).children(":first").height()
}, 100);
}
function hideSelector() {
$('.selector')
.stop()
.animate({
height: "hide",
display: "none"
}, 100);
}
function showDisplayMenu() {
$('#display-menu')
.stop
$('#display-menu')
.toggle("fast");
}
This diff is collapsed.
......@@ -182,9 +182,9 @@ PDF.prototype = {
opt2.y_offset = opt.y;
//clones style
for (var i = 0; i < this.m.windows.length; i++) {
for (var i = 0; i < this.m.n_windows; i++) {
var polyline = elem.querySelectorAll('[id="polyline'+i+'"]')[0]
var color = tagColor[this.m.windows[i].tag]
var color = tagColor[this.m.clone(i).getTag()]
if (polyline.getAttribute("d").indexOf("Z") != -1){
polyline.setAttribute("style", "stroke-width:0px");
......@@ -202,7 +202,7 @@ PDF.prototype = {
//selected clones style
for (var i = 0; i < this.list.length; i++) {
var polyline = elem.querySelectorAll('[id="polyline'+this.list[i]+'"]')[0]
var color = tagColor[this.m.windows[this.list[i]].tag]
var color = tagColor[this.m.clone(this.list[i]).getTag()]
polyline.setAttribute("stroke", color);
polyline.setAttribute("style", "stroke-width: "+opt.strokeSize+"px");
......@@ -339,27 +339,31 @@ PDF.prototype = {
info_clone: function (cloneID) {
this.checkPage(20)
var color = tagColor[this.m.windows[cloneID].tag]
var color = tagColor[this.m.clone(cloneID).getTag()]
this.icon(cloneID, this.marge, this.y - 6, 18, 8)
//clone name
this.doc.setFont('courier', 'bold');
this.doc.setTextColor(color);
this.doc.text(this.marge + 20, this.y, this.m.getName(cloneID));
this.doc.text(this.marge + 20, this.y, this.m.clone(cloneID).getName());
this.doc.setFont('helvetica', 'normal');
this.doc.setTextColor(0, 0, 0);
this.next_row()
//clone reads
this.row('reads', this.m.windows[cloneID].size, 'raw')
var data = []
for (var i = 0; i < this.m.samples.number; i++) {
data[i] = this.m.clone(cloneID).getReads(i)
}
this.row('reads', data, 'raw')
this.next_sub_row()
//clone reads (%)
var data = []
for (var i = 0; i < this.m.samples.number; i++) {
data[i] = this.m.getStrSize(cloneID, i)
data[i] = this.m.clone(cloneID).getStrSize(i)
}
this.row('', data, 'raw')
this.next_row()
......@@ -377,9 +381,9 @@ PDF.prototype = {
if (typeof (m.windows[cloneID].sequence) != 'number') {
var seq = m.windows[cloneID].sequence;
var seqV = seq.substring(0, this.m.windows[cloneID].Vend + 1)
var seqN = seq.substring(this.m.windows[cloneID].Vend + 1, this.m.windows[cloneID].Jstart)
var seqJ = seq.substring(this.m.windows[cloneID].Jstart)
var seqV = seq.substring(0, this.m.clone(cloneID).Vend + 1)
var seqN = seq.substring(this.m.clone(cloneID).Vend + 1, this.m.clone(cloneID).Jstart)
var seqJ = seq.substring(this.m.clone(cloneID).Jstart)
//V
var str;
......@@ -452,7 +456,7 @@ PDF.prototype = {
this.icon(cloneID, x, y, 18, 8)
this.doc.setFontSize(8);
this.doc.text(x+20, y+4, this.m.getName(cloneID));
this.doc.text(x+20, y+4, this.m.clone(cloneID).getName());
},
......
This diff is collapsed.
......@@ -85,7 +85,7 @@ Segment.prototype = {
//align button
span = document.createElement('span');
span.id = "align"
this.m.updateAlignmentButton();
this.updateAlignmentButton();
span.className = "button"
span.onclick = function () {
self.align()
......@@ -198,8 +198,7 @@ Segment.prototype = {
updateElem: function (list) {
for (var i = 0; i < list.length; i++) {
if (this.m.windows[list[i]].select) {
if (this.m.clone(list[i]).isSelected()) {
if (document.getElementById("seq" + list[i])) {
var spanF = document.getElementById("f" + list[i]);
this.div_elem(spanF, list[i]);
......@@ -210,7 +209,6 @@ Segment.prototype = {
this.addToSegmenter(list[i]);
this.show();
}
} else {
if (document.getElementById("seq" + list[i])) {
var element = document.getElementById("seq" + list[i]);
......@@ -223,7 +221,7 @@ Segment.prototype = {
updateElemStyle: function (list) {
for (var i = 0; i < list.length; i++) {
if (this.m.windows[list[i]].select) {
if (this.m.clone(list[i]).isSelected()) {
if (document.getElementById("seq" + list[i])) {
var spanF = document.getElementById("f" + list[i]);
this.div_elem(spanF, list[i]);
......@@ -231,7 +229,6 @@ Segment.prototype = {
this.addToSegmenter(list[i]);
this.show();
}
} else {
if (document.getElementById("seq" + list[i])) {
var element = document.getElementById("seq" + list[i]);
......@@ -239,8 +236,27 @@ Segment.prototype = {
}
}
}
this.updateAlignmentButton