index.html 21.8 KB
Newer Older
1 2 3
<!doctype html>

<!-- 
4 5 6
  This file is part of Vidjil <http://www.vidjil.org>, High-throughput Analysis of V(D)J Immune Repertoire
  Copyright (C) 2011-2017 by Bonsai bioinformatics
  at CRIStAL (UMR CNRS 9189, Université Lille) and Inria Lille
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

  "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/>
-->

<html>
23 24 25
    <head>
        <meta charset="utf-8">
        <title>Vidjil</title>
Marc Duez's avatar
Marc Duez committed
26

Mathieu Giraud's avatar
Mathieu Giraud committed
27 28
        <link rel="shortcut icon" href="./images/favicon-v.ico" type="image/x-icon">
        <link rel="icon" href="./images/favicon-v.ico" type="image/x-icon">
Marc Duez's avatar
Marc Duez committed
29 30
        <link rel="stylesheet" type="text/css" href="css/fonts/ubuntu/stylesheet.css" /> 
        <link rel="stylesheet" type="text/css" href="css/fonts/ubuntu-mono/stylesheet.css" /> 
31
        <link rel="stylesheet" type="text/css" href="css/icons/fontello/css/fontello.css" />
32
        <link rel="stylesheet" type="text/css" href="css/icons/fontello/css/animation.css" />
33 34
        <link id="palette" rel="stylesheet" type="text/css" href="css/light.css" />
        <link id="seg_highlight" rel="stylesheet" type="text/css" href="css/segmenter_highlight.css" />
Ryan Herbert's avatar
Ryan Herbert committed
35
        <link rel="stylesheet" href="css/jstree_themes/default/style.min.css" />
36 37 38

        <script data-main="js/app.js" src="js/lib/require.js"></script>

39 40 41
    </head>


Marc Duez's avatar
Marc Duez committed
42
    <body>
43

44 45 46 47 48
        <div id="file_menu" >
            <span class="closeButton" onclick="cancel();">X</span>

            <h2>Vidjil <span class='logo'>(beta)</span> &ndash; V(D)J repertoire browsing and analysis</h2>

49
            Data file (.vidjil):<br/>
50
            <input id="upload_json" type="file" name="json" /></br>
51
            <p class='help'>The .vidjil file stores a set of clones on several points.</p>
52 53 54

            Analysis file (.analysis, optional):<br/>
            <input id="upload_pref" type="file" name="pref" /></br>
55
            <p class='help'>The .analysis file stores all parameters set by the user (tags, colors, manual clusters).</p>
56 57

            <button onclick="document.getElementById('file_menu').style.display='none';
Marc Duez's avatar
Marc Duez committed
58
            m.load('upload_json','upload_pref', 200)">start</button> 
59 60
        </div>

61
        <div id="axis_choice" >
62 63 64
            <span class="closeButton" onclick="cancel();">X</span>
            <h2>analysis menu</h2>

65
            Analysis file:<br/>
66 67
            <input id="upload_analysis" type="file" name="analysis" /></br></br>

68
            <button onclick="document.getElementById('axis_choice').style.display='none';
69 70
                                    m.loadAnalysis('upload_analysis');">start</button> 
        </div>
Marc Duez's avatar
Marc Duez committed
71
        
72 73 74 75 76 77 78
        <div id="upload_summary" style="" class="menu" onmouseover="showSelector('upload_summary_selector');" onmouseout="hideSelector();">
            <span id="upload_summary_label">upload</span>
            <div id="upload_summary_selector" class="selector"><div>

            </div></div>
        </div>

Armand Bour's avatar
Armand Bour committed
79 80
        <div id="add_clone_menu">
            <span class="closeButton" onclick="cancel();">X</span>
81
            <h2>Add clones from sequences</h2>
Armand Bour's avatar
Armand Bour committed
82

83
            <textarea id="addclone_input" placeholder="Sequence(s) (Fasta)"></textarea>
Armand Bour's avatar
Armand Bour committed
84 85 86 87 88

            <button onclick="document.getElementById('add_clone_menu').style.display = 'none';
                m.addManualClones('addclone_input');">Add</button>
        </div>

89
        <!-- TOP-CONTAINER -->
90
        <div id="top-container" onmouseout="hideSelector()">
91 92 93 94 95 96 97
            <div id="menu-container">
                <div class="menu" id="top_info">
                    <!--Div is filled programmatically -->
                </div>
                <div class="menu" id="db_menu" onmouseover="showSelector('dbSelector');" style="display : none">patients
                    <div id="dbSelector" class="selector"><div>
                        <div class="menu_box">
98
                            <a class="buttonSelector" onclick="javascript:db.call('sample_set/all', {'type': 'patient', 'page': 0})">open patient list</a>
99
                        </div>
100 101 102 103 104 105
                        <div class="menu_box">
                            <div id="last_loaded_file">
                            </div>
                        </div>
                    </div></div>
                </div>
106

107 108 109 110 111
                <div class="menu" id="static_file_menu" onmouseover="showSelector('fileSelector');" style="display : none">file
                  <div id="fileSelector" class="selector"><div>
                        <div class="menu_box">
                            <div id="upload_list">
                            </div>
112
                        </div>
113 114 115 116 117 118
                  </div></div>
                </div>
 
                <div class="menu" id="demo_file_menu" onmouseover="showSelector('demoSelector');">import/export
                    <div id="demoSelector" class="selector"><div>
                        <div class="menu_box">
Mikaël Salson's avatar
Mikaël Salson committed
119 120
                            <a id="import_data_anchor" class="buttonSelector" onclick="javascript:loadData()">import data (.vidjil)</a>
                            <a id="import_data_analysis" class="buttonSelector" onclick="javascript:loadAnalysis()">import analysis</a>
121
                        </div>
122 123 124
                        <div class="menu_box devel-mode">
                            <a class="buttonSelector" id ="add_clones" onclick="javascript:showAddManualCloneMenu()">add clones from sequences</a>
                        </div>
125 126 127 128 129 130 131 132
                        <!--<a class="buttonSelector" onclick="javascript:m.resetAnalysis()">reset analysis</a> -->
                        <!--<a class="buttonSelector" onclick="javascript:reset()">reset all</a> -->
                        <div class="menu_box">
                          <a class="buttonSelector" id="export_sample_report" onclick="javascript:report.reportHTMLdiag()">export report (sample)</a>
                          <a class="buttonSelector" id="export_monitor_report" onclick="javascript:report.reportHTML()">export report (monitor)</a>
                        </div>
                        <div class="menu_box">
                            <a class="buttonSelector" id="export_analysis" onclick="javascript:m.saveAnalysis()">export analysis</a>
133 134
                            <a class="buttonSelector" id="export_svg1" onclick="javascript:graph.resize(1400,800);m.exportSVG('visu2_svg')">export SVG graph</a>
                            <a class="buttonSelector" id="export_svg2" onclick="javascript:sp.resize(1400,800);sp.fastForward();m.exportSVG('visu_svg')">export SVG plot</a>
135 136 137
                            <a class="buttonSelector" id="export_csv" onclick="javascript:m.exportCSV()">export csv (visible clones)</a>
                            <a class="buttonSelector" id="export_fasta" onclick="javascript:m.exportFasta()">export fasta (selected clones)</a>
                        </div>
138 139 140
                        <div class="menu_box">
                            <a class="buttonSelector" id="export_fasta" onclick="javascript:segment.add_all_germline_to_segmenter()">add germline genes (experimental)</a>
                        </div>
141 142 143 144 145
                    </div></div>
                </div>

                <div class="menu" id="cluster_menu" onmouseover="showSelector('clusterSelector');" > cluster
                    <div id="clusterSelector" class="selector"><div>
146 147 148 149
                        <div class="menu_box">
                          <a class="buttonSelector" onclick="m.restoreClusters();">revert to previous clusters</a>
                        </div>
                        <div class="menu_box">
150
                          <a class="buttonSelector" onclick="m.merge();">cluster selected clones</a>
Mathieu Giraud's avatar
Mathieu Giraud committed
151 152 153 154 155 156
                          <a class="buttonSelector" onclick="m.clusterBy(function(id){return m.clone(id).getGene(5)});">cluster by V/5' </a>
                          <a class="buttonSelector" onclick="m.clusterBy(function(id){return m.clone(id).getGene(3)});">cluster by J/3' </a>
                          <a class="buttonSelector" onclick="m.clusterBy(function(id){return m.clone(id).germline});">cluster by locus </a>
                          <a class="buttonSelector devel-mode" onclick="m.similarity_builder.DBscan(95,0.001);">cluster by DBscan (experimental) </a>
                          <a class="buttonSelector" onclick="m.similarity_builder.cluster_me(95,0.1);">cluster by similarity </a>
                          <div id="clusterby_button"> </div>
157 158 159 160
                        </div>
                        <div class="menu_box">
                          <a class="buttonSelector" onclick="m.break();">break selected clusters</a>
                          <a class="buttonSelector" onclick="m.resetClusters();">break all clusters</a>
161
                        </div>
162 163 164 165 166 167
                    </div></div>
                </div>

                <div class="menu" id="color_menu" onmouseover="showSelector('colorSelector');" > color by
                    <div class="div-menu-selector"><select class="menu-selector" onchange="m.changeColorMethod(this.value)">
                        <option value="Tag">tag</option>
168
                        <option value="clone">clone</option>
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
                        <option value="V">V/5'</option>
                        <option value="J">J/3'</option>
                        <option value="N">N</option>
                        <option value="system" id="color_system_button">locus/germline</option>
                        <option value="abundance">abundance</option>
                        <option value="productive">productivity</option>
                    </select></div>
                </div>

                <div class="menu" id="filter_menu" onmouseenter="builder.build_displaySelector();" onmouseover="showSelector('filterSelector');" > filter
                    <div id="filterSelector" class="selector"><div>
                        <div class="menu_box">
                            <span id="top_label"></span></br>
                            <input id="top_slider" type="range" min="5" max="100" step="5" value="10" onchange="m.displayTop(this.value)" />
                        </div>
                    </div></div>
                </div>
186

187 188 189 190 191 192 193
                <div class="menu" id="settings_menu" onmouseenter="builder.build_settings();" onmouseover=" showSelector('settingsSelector');" > settings
                    <div id="settingsSelector" class="selector"><div>
                        <div class="menu_box">
                            normalization</br>
                            <form name="normalize_list" id="normalize_list">
                            </form>
                        </div>
194

195 196
                        <div class="menu_box">
                            normalization method</br>
197 198
                            <label for="menuNormMethConstant" class="buttonSelector" onclick="m.changeNormMethod('constant')" ><input id="menuNormMethConstant" type="radio" name="normalize_method" value="constant" checked />constant</label>
                            <label for="menuNormMethPercent" class="buttonSelector" onclick="m.changeNormMethod('to-100')" ><input id="menuNormMethPercent" type="radio" name="normalize_method" value="to-100" />to 100%</label>
199
                        </div>
200

201
                        <div class="menu_box">
202
                            size display</br>
203 204
                            <label for="menuNotationScientific" class="buttonSelector" onclick="m.changeNotation('scientific', true)"><input id="menuNotationScientific" type="radio" name="notation" value="scientific" />scientific notation</label>
                            <label for="menuNotationPercent" class="buttonSelector" onclick="m.changeNotation('percent', true)"><input id="menuNotationPercent" type="radio" name="notation" value="percent" checked />percent</label>
205
                        </div>
206 207

                        <div class="menu_box">
208
                            sample key</br>
209
                            <label for="menuTimeFormName" class="buttonSelector" onclick="m.changeTimeFormat('name', true)"><input id="menuTimeFormName" type="radio" name="time" value="name" checked />name</label>
210
                            <label for="menuTimeFormShort" class="buttonSelector" onclick="m.changeTimeFormat('short_name', true)"><input id="menuTimeFormShort" type="radio" name="time" value="short_name"/>name (short)</label>
211 212
                            <label for="menuTimeFormSample" class="buttonSelector" onclick="m.changeTimeFormat('sampling_date', true)"><input id="menuTimeFormSample" type="radio" name="time" value="sampling_date" />sampling date</label>
                            <label for="menuTimeFormSamplePlus" class="buttonSelector" onclick="m.changeTimeFormat('delta_date', true)"><input id="menuTimeFormSamplePlus" type="radio" name="time" value="delta_date" />day after first sample</label>
213
                        </div>
214
                        <div class="menu_box">
215
                             N regions in clone names</br>
216 217 218
                             <label for="menuCloneNotNucNum" class="buttonSelector" onclick="m.changeCloneNotation('nucleotide_number', true)"><input id="menuCloneNotNucNum" type="radio" name="show_name" value="nucleotide_number" />length</label>
                             <label for="menuCloneNotSeqShort" class="buttonSelector" onclick="m.changeCloneNotation('short_sequence', true)"><input id="menuCloneNotSeqShort" type="radio" name="show_name" value="short_sequence" checked />sequence (when short)</label>
                             <label for="menuCloneNotSeq" class="buttonSelector" onclick="m.changeCloneNotation('full_sequence', true)"><input id="menuCloneNotSeq" type="radio" name="show_name" value="full_sequence" />sequence (always)</label>
219
                        </div>
220
                        <div class="menu_box">
221
                             alleles in clone names</br>
222 223 224
                             <label for="menu_allele_never" class="buttonSelector" onclick="m.changeAlleleNotation('never', true)"><input id="menu_allele_never" type="radio" name="menu_allele" value="never" />never</label>
                             <label for="menu_allele_when_not_01" class="buttonSelector" onclick="m.changeAlleleNotation('when_not_01', true)"><input id="menu_allele_when_not_01" type="radio" name="menu_allele" value="when_not_01" checked />when not *01</label>
                             <label for="menu_allele_always" class="buttonSelector" onclick="m.changeAlleleNotation('always', true)"><input id="menu_allele_always" type="radio" name="menu_allele" value="always" />always</label>
225
                        </div>
226

Thonier Florian's avatar
Thonier Florian committed
227

228
                        <div class="menu_box devel-mode">
Thonier Florian's avatar
Thonier Florian committed
229
                            primer set</br>
230 231
                            <label for="primerBiomed2" class="buttonSelector" onclick="m.switchPrimersSet('biomed2')"><input type="radio" id="primerBiomed2" name="primers" value="biomed2" />biomed2</label>
                            <label for="primer_fictif" class="buttonSelector" onclick="m.switchPrimersSet('primer_fictif')"><input type="radio" id="primer_fictif" name="primers" value="primer_fictif" />primer_fictif</label>
Thonier Florian's avatar
Thonier Florian committed
232 233 234
			    <!-- TODO : construire liste à partir des data disponibles/chargées dans le model.
                            TODO : passer ça en liste deroulante ? -->
                        </div>
235 236 237 238 239 240
                        <!--
                        <div class="submenu" id="system_menu" style="display:none">
                            <div class="menu_box">
                                selected locus/germline (for the grid)</br>
                                <ul id="germline_list">
                                </ul>
241 242
                            </div>
                        </div>
243
                        -->
244

245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266
                        <!--menu graph/dbscan -->
                        <div class="submenu" style="display:none">

                            <div class="menu_box">
                                <div id="DBSCANEpsSlider">
                                <input id="changeEps" type="range" min="0" max="40" step="1" value="0" onchange="m.changeEps(this.value)" />
                                </div>
                            </div>


                            <div class="menu_box">
                                <div id="DBSCANNbrSlider">
                                <input id="changeNbr" type="range" min="0" max="100" step="1" value="0" onchange="m.changeNbr(this.value)" />
                                </div>
                            </div>


                            <div class="menu_box">
                                <div id="EditDistanceSlider">
                                </br>
                                <input id="displayMax_slider" type="range" min="1" max="20" step="1" value="10" onchange="sp.displayDistanceMax(this.value)" style="display:none"/>
                                </div>
267 268
                            </div>
                        </div>
269

270 271
                    </div></div>
                </div>
272

273

274 275 276 277 278 279 280
                <div id="debug_menu" class="menu" onmouseover="showSelector('adminSelector');" style="display : none"> development
                    <div id="adminSelector" class="selector"><div>
                        <input type="checkbox" onclick=" this.checked ? $('#fps').css('display', '') : $('#fps').css('display', 'none');">display fps</input></br>
                        <input type="checkbox" onclick=" this.checked ? console.openLog() : console.closeLog() ;">log</input>
                        <div class="buttonSelector" onclick="m.changeTimeFormat('delta_date_no_zero', true)"><input type="radio" name="time" value="delta_date_no_zero">day after first sample (no zero)</input></div>
                    </div></div>
                </div>
281 282
            </div>

283
            <div class="menu" id="alert" style="float: right;"></div>
284
            <div id="logo" style="float: right;" onclick="console.log({'type': 'popup', 'default':'welcome'})">Vidjil <span class='logo'>(beta)</span></div>
285

Tatiana Rocher's avatar
Tatiana Rocher committed
286 287
            <div class="menu" style="float: right" onmouseover="showSelector('helpSelector');"> help
                <div id="helpSelector" class="selector"><div>
288
                    <a class="buttonSelector getHelp" onclick="report.sendMail()">get support</a>
289
                    <a class="buttonSelector" href="http://www.vidjil.org/doc/user.html" target="_blank">manual</a>
290
                    <a class="buttonSelector" href="http://www.vidjil.org/doc/tutorial/mastering-vidjil.html" target="_blank">tutorial</a>
291
                    <a class="buttonSelector devel-mode" onclick="my_tips.reset()">reset tips of the day</a>
Tatiana Rocher's avatar
Tatiana Rocher committed
292 293
                </div></div>
                </div>
294

295
            <div style="float: right" class="menu" onmouseover="showSelector('paletteSelector');"> palette 
296
                <div id="paletteSelector" class="selector"><div>
297
                    <a class="buttonSelector" onclick="changeStyle('solarizeL')">light</a>
298 299
                    <a class="buttonSelector" onclick="changeStyle('display')">light (presentation)</a>
                    <a class="buttonSelector" onclick="changeStyle('solarizeD')">dark</a>
300
                </div></div>
301
            </div>
302 303 304 305 306
            <div style="float: right; margin: 5px;" id='live-ajax'>
                <div class="active-container">
                    <img src="images/ajax-loader.gif" />
                </div>
            </div>
307

308
            <div id="fps" style="float: right; display: none"> </div>
309
            <div id="header_messages" class="message_container header"></div>
310

311 312 313 314 315
<!--
	    <div class="menu" style="float: right; margin-right:100px"><span style="padding: 4px 5px; background-color: #fef6e3; font-family: ubuntulight;">
		<b>Maintenance:</b> Vidjil will be offline Tuesday 7, 11:00 → 13:00 CEST. Thank you for your understanding.
	    </span></div>
-->
316
        </div>  
Marc Duez's avatar
Marc Duez committed
317
        <!-- fin top-container-->
318 319 320
        
        <!-- MID-CONTAINER -->
        <div id="mid-container" onmouseover="hideSelector()">
Marc Duez's avatar
Marc Duez committed
321

322
            <!-- LEFT-CONTAINER -->
323
            <div id="left-container">
324 325 326
                <div id="info-row"><div id="info"> </div></div>
                <div id="list-row"><div id="list"> </div></div>
                <div id="data-row"><div id="data"> </div></div>
327
            </div>
328
            <!-- fin left-container -->
329

330
            <div id="vertical-separator"></div>
Marc Duez's avatar
Marc Duez committed
331

332
            <!-- RIGHT-CONTAINER -->
Marc Duez's avatar
Marc Duez committed
333
            <div id="right-container"></div>
334

335
            <!-- VISU-CONTAINER  -->
336
            <div id="visu-container">
Marc Duez's avatar
Marc Duez committed
337
                <div id="visu2"></div>
338
                <div id="visu-separator" >...
339
                    <div class="visu2_menu_anchor devel-mode">
340 341
                        <div class="visu2_menu">
                            <div class="visu2_menu_content">
342
                                <label for="visu2_mode_sp" onclick="switch_visu2('scatterplot')">
343 344 345
                                    scatterplot
                                    <input id="visu2_mode_sp" name="visu2_mode" type="radio"/>
                                </label>
346
                                <label for="visu2_mode_gr" onclick="switch_visu2('graph')">
347
                                    graph
348
                                    <input id="visu2_mode_gr" name="visu2_mode" type="radio" checked/>
349 350 351 352 353 354
                                </label>
                            </div>
                            mode
                        </div>
                    </div>
                </div>
Marc Duez's avatar
Marc Duez committed
355
                <div id="visu" onclick=""></div>
356 357 358 359 360 361
            </div>

        </div>
        <!-- fin mid-container -->

        <!-- BOT-CONTAINER / SEGMENTER-CONTAINER -->
Marc Duez's avatar
Marc Duez committed
362
        <div id="bot-container"> </div>
363

364
        <form id="form"></form>
365

366 367
        <div id="tip-container"></div>

368
    </body> 
369

370
</html>